CoolFace
Datasetpublic

basant307/AI_Governance_Project

sourceHugging Faceapache-2.0updated 2mo agoView on Hugging Face
0likes48downloads
XdrSchemaEncoder.js257 linesDownload Raw Back to xdr
1"use strict";2Object.defineProperty(exports, "__esModule", { value: true });3exports.XdrSchemaEncoder = void 0;4const XdrEncoder_1 = require("./XdrEncoder");5const XdrUnion_1 = require("./XdrUnion");6class XdrSchemaEncoder {7    constructor(writer) {8        this.writer = writer;9        this.encoder = new XdrEncoder_1.XdrEncoder(writer);10    }11    encode(value, schema) {12        this.writer.reset();13        this.writeValue(value, schema);14        return this.writer.flush();15    }16    writeVoid(schema) {17        this.validateSchemaType(schema, 'void');18        this.encoder.writeVoid();19    }20    writeInt(value, schema) {21        this.validateSchemaType(schema, 'int');22        if (!Number.isInteger(value) || value < -2147483648 || value > 2147483647) {23            throw new Error('Value is not a valid 32-bit signed integer');24        }25        this.encoder.writeInt(value);26    }27    writeUnsignedInt(value, schema) {28        this.validateSchemaType(schema, 'unsigned_int');29        if (!Number.isInteger(value) || value < 0 || value > 4294967295) {30            throw new Error('Value is not a valid 32-bit unsigned integer');31        }32        this.encoder.writeUnsignedInt(value);33    }34    writeBoolean(value, schema) {35        this.validateSchemaType(schema, 'boolean');36        this.encoder.writeBoolean(value);37    }38    writeHyper(value, schema) {39        this.validateSchemaType(schema, 'hyper');40        this.encoder.writeHyper(value);41    }42    writeUnsignedHyper(value, schema) {43        this.validateSchemaType(schema, 'unsigned_hyper');44        if ((typeof value === 'number' && value < 0) || (typeof value === 'bigint' && value < BigInt(0))) {45            throw new Error('Value is not a valid unsigned integer');46        }47        this.encoder.writeUnsignedHyper(value);48    }49    writeFloat(value, schema) {50        this.validateSchemaType(schema, 'float');51        this.encoder.writeFloat(value);52    }53    writeDouble(value, schema) {54        this.validateSchemaType(schema, 'double');55        this.encoder.writeDouble(value);56    }57    writeQuadruple(value, schema) {58        this.validateSchemaType(schema, 'quadruple');59        this.encoder.writeQuadruple(value);60    }61    writeEnum(value, schema) {62        if (schema.type !== 'enum') {63            throw new Error('Schema is not an enum schema');64        }65        if (!(value in schema.values)) {66            throw new Error(`Invalid enum value: ${value}`);67        }68        this.encoder.writeInt(schema.values[value]);69    }70    writeOpaque(value, schema) {71        if (schema.type !== 'opaque') {72            throw new Error('Schema is not an opaque schema');73        }74        if (value.length !== schema.size) {75            throw new Error(`Opaque data length ${value.length} does not match schema size ${schema.size}`);76        }77        this.encoder.writeOpaque(value);78    }79    writeVarlenOpaque(value, schema) {80        if (schema.type !== 'vopaque') {81            throw new Error('Schema is not a variable-length opaque schema');82        }83        if (schema.size !== undefined && value.length > schema.size) {84            throw new Error(`Opaque data length ${value.length} exceeds maximum size ${schema.size}`);85        }86        this.encoder.writeVarlenOpaque(value);87    }88    writeString(value, schema) {89        if (schema.type !== 'string') {90            throw new Error('Schema is not a string schema');91        }92        if (schema.size !== undefined && value.length > schema.size) {93            throw new Error(`String length ${value.length} exceeds maximum size ${schema.size}`);94        }95        this.encoder.writeStr(value);96    }97    writeArray(value, schema) {98        if (schema.type !== 'array') {99            throw new Error('Schema is not an array schema');100        }101        if (value.length !== schema.size) {102            throw new Error(`Array length ${value.length} does not match schema size ${schema.size}`);103        }104        for (const item of value) {105            this.writeValue(item, schema.elements);106        }107    }108    writeVarlenArray(value, schema) {109        if (schema.type !== 'varray') {110            throw new Error('Schema is not a variable-length array schema');111        }112        if (schema.size !== undefined && value.length > schema.size) {113            throw new Error(`Array length ${value.length} exceeds maximum size ${schema.size}`);114        }115        this.encoder.writeUnsignedInt(value.length);116        for (const item of value) {117            this.writeValue(item, schema.elements);118        }119    }120    writeStruct(value, schema) {121        if (schema.type !== 'struct') {122            throw new Error('Schema is not a struct schema');123        }124        for (const [fieldSchema, fieldName] of schema.fields) {125            if (!(fieldName in value)) {126                throw new Error(`Missing required field: ${fieldName}`);127            }128            this.writeValue(value[fieldName], fieldSchema);129        }130    }131    writeUnion(value, schema, discriminant) {132        if (schema.type !== 'union') {133            throw new Error('Schema is not a union schema');134        }135        const arm = schema.arms.find(([armDiscriminant]) => armDiscriminant === discriminant);136        if (!arm) {137            if (schema.default) {138                this.writeDiscriminant(discriminant);139                this.writeValue(value, schema.default);140            }141            else {142                throw new Error(`No matching arm found for discriminant: ${discriminant}`);143            }144        }145        else {146            this.writeDiscriminant(discriminant);147            this.writeValue(value, arm[1]);148        }149    }150    writeNumber(value, schema) {151        switch (schema.type) {152            case 'int':153                this.writeInt(value, schema);154                break;155            case 'unsigned_int':156                this.writeUnsignedInt(value, schema);157                break;158            case 'hyper':159                this.writeHyper(value, schema);160                break;161            case 'unsigned_hyper':162                this.writeUnsignedHyper(value, schema);163                break;164            case 'float':165                this.writeFloat(value, schema);166                break;167            case 'double':168                this.writeDouble(value, schema);169                break;170            case 'quadruple':171                this.writeQuadruple(value, schema);172                break;173            default:174                throw new Error(`Schema type ${schema.type} is not a numeric type`);175        }176    }177    writeValue(value, schema) {178        switch (schema.type) {179            case 'void':180                this.encoder.writeVoid();181                break;182            case 'int':183                this.encoder.writeInt(value);184                break;185            case 'unsigned_int':186                this.encoder.writeUnsignedInt(value);187                break;188            case 'boolean':189                this.encoder.writeBoolean(value);190                break;191            case 'hyper':192                this.encoder.writeHyper(value);193                break;194            case 'unsigned_hyper':195                this.encoder.writeUnsignedHyper(value);196                break;197            case 'float':198                this.encoder.writeFloat(value);199                break;200            case 'double':201                this.encoder.writeDouble(value);202                break;203            case 'quadruple':204                this.encoder.writeQuadruple(value);205                break;206            case 'enum':207                this.writeEnum(value, schema);208                break;209            case 'opaque':210                this.writeOpaque(value, schema);211                break;212            case 'vopaque':213                this.writeVarlenOpaque(value, schema);214                break;215            case 'string':216                this.writeString(value, schema);217                break;218            case 'array':219                this.writeArray(value, schema);220                break;221            case 'varray':222                this.writeVarlenArray(value, schema);223                break;224            case 'struct':225                this.writeStruct(value, schema);226                break;227            case 'union':228                if (value instanceof XdrUnion_1.XdrUnion) {229                    this.writeUnion(value.value, schema, value.discriminant);230                }231                else {232                    throw new Error('Union values must be wrapped in XdrUnion class');233                }234                break;235            default:236                throw new Error(`Unknown schema type: ${schema.type}`);237        }238    }239    validateSchemaType(schema, expectedType) {240        if (schema.type !== expectedType) {241            throw new Error(`Expected schema type ${expectedType}, got ${schema.type}`);242        }243    }244    writeDiscriminant(discriminant) {245        if (typeof discriminant === 'number') {246            this.encoder.writeInt(discriminant);247        }248        else if (typeof discriminant === 'boolean') {249            this.encoder.writeBoolean(discriminant);250        }251        else {252            throw new Error('String discriminants require enum schema context');253        }254    }255}256exports.XdrSchemaEncoder = XdrSchemaEncoder;257//# sourceMappingURL=XdrSchemaEncoder.js.map
basant307/AI_Governance_Project · CoolFace