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, Schema.Struct.Context, Schema.Struct.Constructor>, {}, {} > { readonly _tag: Tag } export const MutableTaggedClass = Schema.TaggedClass as (identifier?: string) => < Tag extends string, Fields extends Schema.Struct.Fields, >( tag: Tag, fieldsOr: Fields | HasFields, annotations?: Schema.Annotations.Schema, ) => IMutableTaggedClass< Self, Tag, { readonly _tag: Schema.PropertySignature<":", Tag, never, ":", Tag, true, never> } & Fields >