@iotize/tap
Version:
IoTize Device client for Javascript
73 lines • 5.75 kB
JavaScript
import { TapStreamReader, TapStreamWriter } from '../../frame/import-adapter';
export class EnumConverter {
constructor(mapping) {
this.mapping = mapping;
}
decode(value) {
const literalValue = this.decodeToLiteral(value);
const enumStringValue = this.mapping[literalValue];
if (!enumStringValue) {
throw new Error(`Unknown litteral value ${literalValue}.`);
}
return literalValue;
}
encode(value) {
if (typeof value !== 'number') {
throw Error(`Illegal argument when encoding enum value. Expecting number but found ${typeof value}`);
}
return this.encodeToLiteral(value);
}
}
export class FixedSizeEnumConverter extends EnumConverter {
constructor(mapping, size = 1) {
super(mapping);
this.mapping = mapping;
this.size = size;
}
decodeToLiteral(value) {
return TapStreamReader.fromArray(value).readU(this.size);
}
encodeToLiteral(value) {
return new TapStreamWriter(this.size).writeU(value, this.size).toBytes;
}
}
export class EnumListConverter {
constructor(size, mapping) {
this.size = size;
this.mapping = mapping;
}
decode(value) {
const bits = this.decodeToLiteral(TapStreamReader.create(value));
const results = [];
const enumValues = Object.keys(this.mapping).filter((key) => !isNaN(Number(this.mapping[key])));
// console.log("numval", enumValues)
for (const enumName of enumValues) {
const enumValue = this.mapping[enumName];
const mask = parseInt(enumValue);
if (mask == 0) {
if (bits == 0) {
results.push(enumValue);
}
}
else if ((bits & mask) == mask) {
results.push(enumValue);
}
}
return results;
}
encode(values) {
let mask = 0;
for (const value of values) {
if (typeof value !== 'number') {
throw Error(`Illegal argument when encoding enum value. Expecting number but found ${typeof value}`);
}
mask |= value;
}
const result = new TapStreamWriter(this.size).writeU(mask, this.size).toBytes;
return result;
}
decodeToLiteral(stream) {
return stream.readU(this.size);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bS1jb252ZXJ0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9jbGllbnQvaW1wbC9zcmMvbGliL2NvbnZlcnRlci9ib2R5L2VudW0tY29udmVydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFOUUsTUFBTSxPQUFnQixhQUFhO0lBQ2pDLFlBQW1CLE9BQVU7UUFBVixZQUFPLEdBQVAsT0FBTyxDQUFHO0lBQUcsQ0FBQztJQUVqQyxNQUFNLENBQUMsS0FBaUI7UUFDdEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRCxNQUFNLGVBQWUsR0FBbUIsSUFBSSxDQUFDLE9BQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMzRSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLFlBQVksR0FBRyxDQUFDLENBQUM7U0FDNUQ7UUFDRCxPQUFPLFlBQXdCLENBQUM7SUFDbEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFRO1FBQ2IsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDN0IsTUFBTSxLQUFLLENBQ1QsMEVBQTBFLE9BQU8sS0FBSyxFQUFFLENBQ3pGLENBQUM7U0FDSDtRQUNELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFlLENBQUMsQ0FBQztJQUMvQyxDQUFDO0NBS0Y7QUFFRCxNQUFNLE9BQU8sc0JBQTBCLFNBQVEsYUFBZ0I7SUFDN0QsWUFDUyxPQUFVLEVBQ1YsT0FBTyxDQUFDO1FBRWYsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBSFIsWUFBTyxHQUFQLE9BQU8sQ0FBRztRQUNWLFNBQUksR0FBSixJQUFJLENBQUk7SUFHakIsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFp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