@mrhiden/cstruct
Version:
For packing and unpacking bytes (C like structures) in/from Buffer based on Object/Array type for parsing.
68 lines (67 loc) • 2.24 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CStructLE = void 0;
const cstruct_1 = require("./cstruct");
const make_le_1 = require("./make-le");
const write_le_1 = require("./write-le");
const read_le_1 = require("./read-le");
const decorators_metadata_1 = require("./decorators-metadata");
/**
* C_Struct LE - Little Endian
* Binary/Object and vice versa parser for JavaScript
*
* Parse MODEL,
* Parse TYPES,
* Uses Object, JSON, C_Struct lang (kind of C)
*/
class CStructLE extends cstruct_1.CStruct {
constructor(model, types) {
super(model, types);
}
make(struct) {
const writer = new make_le_1.MakeLE(this.modelClone, struct);
return {
buffer: writer.toBuffer(),
offset: writer.offset,
size: writer.size
};
}
write(buffer, struct, offset = 0) {
const writer = new write_le_1.WriteLE(this.modelClone, struct, buffer, offset);
return {
buffer: writer.toBuffer(),
offset: writer.offset,
size: writer.size
};
}
read(buffer, offset = 0) {
const reader = new read_le_1.ReadLE(this.modelClone, buffer, offset);
return {
struct: reader.toStruct(),
offset: reader.offset,
size: reader.size
};
}
static make(struct) {
const cStruct = decorators_metadata_1.CStructMetadata.getCStructLE(struct);
return cStruct.make(struct);
}
static write(struct, buffer, offset) {
const cStruct = decorators_metadata_1.CStructMetadata.getCStructLE(struct);
return cStruct.write(buffer, struct, offset);
}
static read(TClass, buffer, offset) {
const instance = new TClass();
const cStruct = decorators_metadata_1.CStructMetadata.getCStructLE(instance);
const result = cStruct.read(buffer, offset);
result.struct = Object.assign(instance, result.struct);
return result;
}
static from(from) {
return decorators_metadata_1.CStructMetadata.getCStructLE(from);
}
static fromModelTypes(model, types) {
return new CStructLE(model, types);
}
}
exports.CStructLE = CStructLE;