import { GenericEmbedded, EmbeddedType, EmbeddedTypeDecode, EmbeddedTypeEncode } from "./embedded"; import { Encoder, EncoderState, identityEmbeddedTypeEncode } from "./encoder"; import { genericEmbeddedTypeDecode } from "./reader"; import { Value } from "./values"; import { DecoderState, neverEmbeddedTypeDecode } from "./decoder"; export const genericEmbeddedTypeEncode: EmbeddedTypeEncode = { encode(s: EncoderState, v: GenericEmbedded): void { new Encoder(s, this).push(v.generic); }, toValue(v: GenericEmbedded): Value { return v.generic; } }; export const genericEmbeddedType: EmbeddedType = Object.assign({}, genericEmbeddedTypeDecode, genericEmbeddedTypeEncode); export const neverEmbeddedTypeEncode: EmbeddedTypeEncode = { encode(_s: EncoderState, _v: never): void { throw new Error("Embeddeds not permitted encoding Preserves document"); }, toValue(_v: never): Value { throw new Error("Embeddeds not permitted encoding Preserves document"); } }; export const neverEmbeddedType: EmbeddedType = Object.assign({}, neverEmbeddedTypeDecode, neverEmbeddedTypeEncode); export const identityEmbeddedTypeDecode: EmbeddedTypeDecode = { decode(_s: DecoderState): any { throw new Error("Cannot decode identityEmbeddedType"); }, fromValue(_v: Value): any { throw new Error("Cannot decode identityEmbeddedType"); }, }; export const identityEmbeddedType: EmbeddedType = Object.assign({}, identityEmbeddedTypeDecode, identityEmbeddedTypeEncode);