EffectSchemaTraitExpressionBuilder
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Julien Valverdé
2024-05-09 02:10:56 +02:00
parent 4ff193ea96
commit 90bb907db2
4 changed files with 166 additions and 82 deletions

View File

@@ -0,0 +1,78 @@
import { Schema as S } from "@effect/schema"
import { Trait } from "../Trait"
import { TraitExpression } from "../TraitExpression"
import { TraitExpressionBuilder } from "../TraitExpressionBuilder"
import { spreadSupertraits } from "../spreadSupertraits"
import { traitsUnique } from "../traitsUnique"
export class EffectSchemaTraitExpressionBuilder<
Superclass extends S.Class<unknown, Fields, A, I, R, C, Inherited, Proto>,
const Traits extends readonly Trait<any, any, any, any>[],
Fields extends S.Struct.Fields,
A, I, R, C,
Inherited extends object,
Proto,
> {
constructor(
readonly expressionSuperclass: Superclass,
readonly expressionTraits: Traits,
) {}
extends<
Super extends S.Class<unknown, SuperFields, SuperA, SuperI, SuperR, SuperC, SuperInherited, SuperProto>,
SuperFields extends S.Struct.Fields,
SuperA, SuperI, SuperR, SuperC,
SuperInherited extends object,
SuperProto,
>(
superclass: Super | S.Class<unknown, SuperFields, SuperA, SuperI, SuperR, SuperC, SuperInherited, SuperProto>
) {
return new EffectSchemaTraitExpressionBuilder<
Super,
Traits,
SuperFields,
SuperA, SuperI, SuperR, SuperC,
SuperInherited,
SuperProto
>(
superclass as Super,
this.expressionTraits,
)
}
expresses<
const T extends readonly Trait<
TraitExpression<
typeof TraitExpression.NullSuperclass,
readonly Trait<any, any, any, any>[]
>,
any,
any,
any
>[]
>(
...traits: T
): EffectSchemaTraitExpressionBuilder<
Superclass,
TraitExpressionBuilder.ExpressesReturnTypeTraits<Traits, T>,
Fields,
A, I, R, C,
Inherited,
Proto
> {
return new EffectSchemaTraitExpressionBuilder(
this.expressionSuperclass,
traitsUnique([
...this.expressionTraits,
...spreadSupertraits(traits),
]),
)
}
}