import { Brand } from "@tsplus/runtime/Brand"; import { Check, TypeLevel } from "@tsplus/stdlib/type-level"; import { Either } from "@tsplus/stdlib/data/Either/definition"; import { Maybe } from "@tsplus/stdlib/data/Maybe/definition"; import { Chunk } from "@tsplus/stdlib/collections/Chunk/definition"; import { List } from "@tsplus/stdlib/collections/List/definition"; import { ImmutableArray } from "@tsplus/stdlib/collections/ImmutableArray/definition"; import { SortedSet } from "@tsplus/stdlib/collections/SortedSet/definition"; import { Guard } from "@tsplus/runtime/Guard"; /** * A Encoder is a type representing the ability to identify when a value is of type A at runtime * * @tsplus type Encoder * @tsplus derive nominal */ export interface Encoder { readonly encode: (a: A) => unknown; } /** * @tsplus type EncoderOps */ export interface EncoderOps { (f: (a: A) => unknown): Encoder; } /** * Creates a new Encoder */ export declare const Encoder: EncoderOps; /** * Encoder for `true` * @tsplus implicit * @tsplus location "@tsplus/runtime/Encoder" */ export declare const _true: Encoder; /** * Encoder for `false` * @tsplus implicit * @tsplus location "@tsplus/runtime/Encoder" */ export declare const _false: Encoder; /** * Encoder for a boolean * @tsplus implicit * @tsplus location "@tsplus/runtime/Encoder" */ export declare const boolean: Encoder; /** * Encoder for a number * @tsplus implicit * @tsplus location "@tsplus/runtime/Encoder" */ export declare const number: Encoder; /** * Encoder for null * @tsplus implicit * @tsplus location "@tsplus/runtime/Encoder" */ export declare const _null: Encoder; /** * Encoder for a string * @tsplus implicit * @tsplus location "@tsplus/runtime/Encoder" */ export declare const string: Encoder; /** * Encoder for a Date * @tsplus implicit * @tsplus location "@tsplus/runtime/Encoder" */ export declare const date: Encoder; /** * Encoder for an object shaped like { _tag: string } * @tsplus implicit * @tsplus location "@tsplus/runtime/Encoder" */ export declare const taggedObject: Encoder<{ _tag: string; }>; /** * @tsplus derive Encoder<_> 10 * @tsplus location "@tsplus/runtime/Encoder" */ export declare function deriveNamed>(...[base]: Check> extends Check.False ? [base: Encoder>] : never): Encoder; /** * @tsplus derive Encoder<_> 10 * @tsplus location "@tsplus/runtime/Encoder" */ export declare function deriveValidation>(...[base]: Check> extends Check.True ? [base: Encoder>] : never): Encoder; /** * @tsplus derive Encoder lazy * @tsplus location "@tsplus/runtime/Encoder" */ export declare function deriveLazy(fn: (_: Encoder) => Encoder): Encoder; /** * @tsplus derive Encoder[Either]<_> 10 * @tsplus location "@tsplus/runtime/Encoder" */ export declare function deriveEither>(...[left, right]: [A] extends [Either] ? [left: Encoder<_E>, right: Encoder<_A>] : never): Encoder; /** * @tsplus derive Encoder[Maybe]<_> 10 * @tsplus location "@tsplus/runtime/Encoder" */ export declare function deriveOption>(...[value]: [A] extends [Maybe] ? [value: Encoder<_A>] : never): Encoder; /** * @tsplus derive Encoder[Array]<_> 10 * @tsplus location "@tsplus/runtime/Encoder" */ export declare function deriveArray>(...[element]: [A] extends [Array] ? Check>> extends Check.True ? [element: Encoder<_A>] : never : never): Encoder; /** * @tsplus derive Encoder[Chunk]<_> 10 * @tsplus location "@tsplus/runtime/Encoder" */ export declare function deriveChunk>(...[element]: [A] extends [Chunk] ? Check>> extends Check.True ? [element: Encoder<_A>] : never : never): Encoder; /** * @tsplus derive Encoder[List]<_> 10 * @tsplus location "@tsplus/runtime/Encoder" */ export declare function deriveList>(...[element]: [A] extends [List] ? Check>> extends Check.True ? [element: Encoder<_A>] : never : never): Encoder; /** * @tsplus derive Encoder[ImmutableArray]<_> 10 * @tsplus location "@tsplus/runtime/Encoder" */ export declare function deriveImmutableArray>(...[element]: [A] extends [ImmutableArray] ? Check>> extends Check.True ? [element: Encoder<_A>] : never : never): Encoder; /** * @tsplus derive Encoder[SortedSet]<_> 10 * @tsplus location "@tsplus/runtime/Encoder" */ export declare function deriveSortedSet>(...[element]: [A] extends [SortedSet] ? Check>> extends Check.True ? [element: Encoder<_A>] : never : never): Encoder; /** * @tsplus derive Encoder<_> 10 * @tsplus location "@tsplus/runtime/Encoder" */ export declare function deriveEmptyRecord(..._: Check> extends Check.True ? [] : never): Encoder; /** * @tsplus derive Encoder<_> 15 * @tsplus location "@tsplus/runtime/Encoder" */ export declare function deriveDictionary>(...[value]: Check> extends Check.True ? [value: Encoder] : never): Encoder; /** * @tsplus derive Encoder<_> 15 * @tsplus location "@tsplus/runtime/Encoder" */ export declare function deriveRecord>(...[value, requiredKeys]: Check> extends Check.True ? [ value: Encoder, requiredKeys: { [k in keyof A]: 0; } ] : never): Encoder; /** * @tsplus derive Encoder<_> 20 * @tsplus location "@tsplus/runtime/Encoder" */ export declare function deriveLiteral(...[value]: Check & Check.Not>> extends Check.True ? [value: A] : never): Encoder; /** * @tsplus derive Encoder<_> 20 * @tsplus location "@tsplus/runtime/Encoder" */ export declare function deriveStruct>(...[requiredFields, optionalFields]: Check> extends Check.True ? [ ...[ requiredFields: { [k in TypeLevel.RequiredKeys]: Encoder; } ], ...([TypeLevel.OptionalKeys] extends [never] ? [] : [ optionalFields: { [k in TypeLevel.OptionalKeys]: Encoder>; } ]) ] : never): Encoder; /** * @tsplus derive Encoder<_> 20 * @tsplus location "@tsplus/runtime/Encoder" */ export declare function deriveTagged(...[elements]: Check> extends Check.True ? [ elements: { [k in A["_tag"]]: Encoder>; } ] : never): Encoder; /** * @tsplus derive Encoder<|> 30 * @tsplus location "@tsplus/runtime/Encoder" */ export declare function deriveUnion(...elements: { [k in keyof A]: [Guard, Encoder]; }): Encoder; /** * @tsplus fluent Encoder encodeJSON * @tsplus location "@tsplus/runtime/Encoder" */ export declare function encodeJSON(encoder: Encoder, a: A): string; //# sourceMappingURL=Encoder.d.ts.map