EffectSchemaTraitExpressionBuilder
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
78
src/effect/EffectSchemaTraitExpressionBuilder.ts
Normal file
78
src/effect/EffectSchemaTraitExpressionBuilder.ts
Normal 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),
|
||||
]),
|
||||
)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user