38 lines
923 B
TypeScript
38 lines
923 B
TypeScript
import { Schema } from "@effect/schema"
|
|
import type { IMutableClass } from "./MutableClass"
|
|
import type { HasFields } from "./util"
|
|
|
|
|
|
export interface IMutableTaggedClass<
|
|
Self,
|
|
Tag,
|
|
Fields extends Schema.Struct.Fields,
|
|
>
|
|
extends IMutableClass<
|
|
Self,
|
|
Fields,
|
|
Schema.Struct.Encoded<Fields>,
|
|
Schema.Struct.Context<Fields>,
|
|
Schema.Struct.Constructor<Omit<Fields, "_tag">>,
|
|
{},
|
|
{}
|
|
>
|
|
{
|
|
readonly _tag: Tag
|
|
}
|
|
|
|
|
|
export const MutableTaggedClass = Schema.TaggedClass as <Self>(identifier?: string) =>
|
|
<
|
|
Tag extends string,
|
|
Fields extends Schema.Struct.Fields,
|
|
>(
|
|
tag: Tag,
|
|
fieldsOr: Fields | HasFields<Fields>,
|
|
annotations?: Schema.Annotations.Schema<Self>,
|
|
) => IMutableTaggedClass<
|
|
Self,
|
|
Tag,
|
|
{ readonly _tag: Schema.PropertySignature<":", Tag, never, ":", Tag, true, never> } & Fields
|
|
>
|