CoolFace
Datasetpublic

basant307/AI_Governance_Project

sourceHugging Faceapache-2.0updated 2mo agoView on Hugging Face
0likes48downloads
XdrSchemaDecoder.js115 linesDownload Raw Back to xdr
1"use strict";2Object.defineProperty(exports, "__esModule", { value: true });3exports.XdrSchemaDecoder = void 0;4const Reader_1 = require("@jsonjoy.com/buffers/lib/Reader");5const XdrDecoder_1 = require("./XdrDecoder");6const XdrUnion_1 = require("./XdrUnion");7class XdrSchemaDecoder {8    constructor(reader = new Reader_1.Reader()) {9        this.reader = reader;10        this.decoder = new XdrDecoder_1.XdrDecoder(reader);11    }12    decode(data, schema) {13        this.reader.reset(data);14        return this.readValue(schema);15    }16    readValue(schema) {17        switch (schema.type) {18            case 'void':19                return this.decoder.readVoid();20            case 'int':21                return this.decoder.readInt();22            case 'unsigned_int':23                return this.decoder.readUnsignedInt();24            case 'boolean':25                return this.decoder.readBoolean();26            case 'hyper':27                return this.decoder.readHyper();28            case 'unsigned_hyper':29                return this.decoder.readUnsignedHyper();30            case 'float':31                return this.decoder.readFloat();32            case 'double':33                return this.decoder.readDouble();34            case 'quadruple':35                return this.decoder.readQuadruple();36            case 'enum':37                return this.readEnum(schema);38            case 'opaque':39                return this.readOpaque(schema);40            case 'vopaque':41                return this.readVarlenOpaque(schema);42            case 'string':43                return this.readString(schema);44            case 'array':45                return this.readArray(schema);46            case 'varray':47                return this.readVarlenArray(schema);48            case 'struct':49                return this.readStruct(schema);50            case 'union':51                return this.readUnion(schema);52            default:53                throw new Error(`Unknown schema type: ${schema.type}`);54        }55    }56    readEnum(schema) {57        const value = this.decoder.readEnum();58        for (const [name, enumValue] of Object.entries(schema.values)) {59            if (enumValue === value) {60                return name;61            }62        }63        return value;64    }65    readOpaque(schema) {66        return this.decoder.readOpaque(schema.size);67    }68    readVarlenOpaque(schema) {69        const data = this.decoder.readVarlenOpaque();70        if (schema.size !== undefined && data.length > schema.size) {71            throw new Error(`Variable-length opaque data size ${data.length} exceeds maximum ${schema.size}`);72        }73        return data;74    }75    readString(schema) {76        const str = this.decoder.readString();77        if (schema.size !== undefined && str.length > schema.size) {78            throw new Error(`String length ${str.length} exceeds maximum ${schema.size}`);79        }80        return str;81    }82    readArray(schema) {83        return this.decoder.readArray(schema.size, () => this.readValue(schema.elements));84    }85    readVarlenArray(schema) {86        const array = this.decoder.readVarlenArray(() => this.readValue(schema.elements));87        if (schema.size !== undefined && array.length > schema.size) {88            throw new Error(`Variable-length array size ${array.length} exceeds maximum ${schema.size}`);89        }90        return array;91    }92    readStruct(schema) {93        const struct = {};94        for (const [fieldSchema, fieldName] of schema.fields) {95            struct[fieldName] = this.readValue(fieldSchema);96        }97        return struct;98    }99    readUnion(schema) {100        const discriminant = this.decoder.readInt();101        for (const [armDiscriminant, armSchema] of schema.arms) {102            if (armDiscriminant === discriminant) {103                const value = this.readValue(armSchema);104                return new XdrUnion_1.XdrUnion(discriminant, value);105            }106        }107        if (schema.default) {108            const value = this.readValue(schema.default);109            return new XdrUnion_1.XdrUnion(discriminant, value);110        }111        throw new Error(`No matching union arm for discriminant: ${discriminant}`);112    }113}114exports.XdrSchemaDecoder = XdrSchemaDecoder;115//# sourceMappingURL=XdrSchemaDecoder.js.map
basant307/AI_Governance_Project · CoolFace