preserves/implementations/javascript/packages/core/src/pointerTypes.ts

51 lines
1.7 KiB
TypeScript

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<GenericPointer> = {
encode(s: EncoderState, v: GenericPointer): void {
new Encoder(s, this).push(v.generic);
},
toValue(v: GenericPointer): Value<GenericPointer> {
return v.generic;
}
};
export const genericPointerType: PointerType<GenericPointer> =
Object.assign({},
genericPointerTypeDecode,
genericPointerTypeEncode);
export const neverPointerTypeEncode: PointerTypeEncode<never> = {
encode(_s: EncoderState, _v: never): void {
throw new Error("Pointers not permitted encoding Preserves document");
},
toValue(_v: never): Value<GenericPointer> {
throw new Error("Pointers not permitted encoding Preserves document");
}
};
export const neverPointerType: PointerType<never> =
Object.assign({},
neverPointerTypeDecode,
neverPointerTypeEncode);
export const identityPointerTypeDecode: PointerTypeDecode<any> = {
decode(_s: DecoderState): any {
throw new Error("Cannot decode identityPointerType");
},
fromValue(_v: Value<GenericPointer>): any {
throw new Error("Cannot decode identityPointerType");
},
};
export const identityPointerType: PointerType<any> =
Object.assign({},
identityPointerTypeDecode,
identityPointerTypeEncode);