import { Encoder, EncoderState } from "./encoder"; import type { TypedDecoder } from "./decoder"; import type { Value } from "./values"; import { strip } from "./strip"; export class DefaultPointer { v: Value; constructor(v: Value) { this.v = v; } equals(other: any, is: (a: any, b: any) => boolean) { return Object.is(other.constructor, this.constructor) && is(this.v, other.v); } asPreservesText(): string { return '#!' + this.v.asPreservesText(); } } export function readDefaultPointer(v: Value): DefaultPointer { return new DefaultPointer(strip(v)); } export function decodeDefaultPointer(d: TypedDecoder): DefaultPointer { return readDefaultPointer(d.withPointerDecoder(decodeDefaultPointer, d => d.next())); } export function encodeDefaultPointer(e: EncoderState, w: DefaultPointer): void { new Encoder(e, encodeDefaultPointer).push(w.v); }