import { GenericPointer, PointerType, PointerTypeDecode, PointerTypeEncode } from "./pointer"; import { Encoder, EncoderState, identityPointerTypeEncode } from "./encoder"; import { genericPointerTypeDecode } from "./reader"; import { Value } from "./values"; import { DecoderState, neverPointerTypeDecode } from "./decoder"; export const genericPointerTypeEncode: PointerTypeEncode = { encode(s: EncoderState, v: GenericPointer): void { new Encoder(s, this).push(v.generic); }, toValue(v: GenericPointer): Value { return v.generic; } }; export const genericPointerType: PointerType = Object.assign({}, genericPointerTypeDecode, genericPointerTypeEncode); export const neverPointerTypeEncode: PointerTypeEncode = { encode(_s: EncoderState, _v: never): void { throw new Error("Pointers not permitted encoding Preserves document"); }, toValue(_v: never): Value { throw new Error("Pointers not permitted encoding Preserves document"); } }; export const neverPointerType: PointerType = Object.assign({}, neverPointerTypeDecode, neverPointerTypeEncode); export const identityPointerTypeDecode: PointerTypeDecode = { decode(_s: DecoderState): any { throw new Error("Cannot decode identityPointerType"); }, fromValue(_v: Value): any { throw new Error("Cannot decode identityPointerType"); }, }; export const identityPointerType: PointerType = Object.assign({}, identityPointerTypeDecode, identityPointerTypeEncode);