@iotize/tap
Version:
IoTize Device client for Javascript
66 lines • 5.92 kB
JavaScript
import { bufferToHexString } from '@iotize/common/byte-converter';
import { debug } from '../../debug';
import { MultipleMaskConverter } from './multiple-mask-decoder';
import { NumberConverter } from './number-converter';
const TAG = 'Converter';
/**
* TODO improv it . We don't know the size of input buffer...
*/
export class UniqMaskConverter {
// protected _reverseMapping: { [key: number]: OutputType };
constructor(mapping) {
this._mapping = mapping;
}
decode(body) {
return UniqMaskConverter.decodeOne(body, this._mapping);
}
encode(value) {
return UniqMaskConverter.encodeOneAsBuffer(value, this._mapping);
}
static decodeOneExact(data, mapping) {
if (typeof data !== 'number') {
data = NumberConverter.fromOpaqueMsb(data);
}
for (var key in mapping) {
var mask = parseInt(key);
if (data == mask) {
return mapping[mask];
}
}
throw new Error(`Cannot decode ${typeof data === 'number'
? 'number ' + data
: '0x' + bufferToHexString(data)}. Available keys are ${Object.keys(mapping)}`);
}
static decodeOne(data, mapping) {
var results = MultipleMaskConverter.decodeAll(data, mapping);
if (results.length == 0) {
throw new Error(`Cannot decode value ${typeof data === 'number' ? data : '0x' + bufferToHexString(data)}. Available keys are ${Object.keys(mapping)}`);
}
else if (results.length > 1) {
debug(TAG, 'Multiple result for data : ', results, data, mapping);
}
return results[0];
}
static encodeOneAsNumber(data, mapping) {
let swappedMap = UniqMaskConverter.swapKeyValue(mapping);
let dataAsString = data.toString();
if (!(dataAsString in swappedMap)) {
throw new Error(`Key ${dataAsString} does not exist in mapping. Available keys are ${Object.keys(swappedMap)}`);
}
return parseInt(swappedMap[dataAsString]);
}
static encodeOneAsBuffer(data, mapping) {
let result = new Uint8Array(1); // TODO change according to conf
let encodedValue = UniqMaskConverter.encodeOneAsNumber(data, mapping);
result[0] = encodedValue & 0xff;
return result;
}
static swapKeyValue(input) {
var ret = {};
for (var key in input) {
ret[input[key]] = key;
}
return ret;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pcS1tYXNrLWRlY29kZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9jbGllbnQvaW1wbC9zcmMvbGliL2NvbnZlcnRlci9ib2R5L3VuaXEtbWFzay1kZWNvZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBR2xFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDcEMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXJELE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQztBQUV4Qjs7R0FFRztBQUNILE1BQU0sT0FBTyxpQkFBaUI7SUFJNUIsNERBQTREO0lBRTVELFlBQVksT0FBWTtRQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztJQUMxQixDQUFDO0lBRU0sTUFBTSxDQUFDLElBQWdCO1FBQzVCLE9BQU8saUJBQWlCLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVNLE1BQU0sQ0FBQyxLQUFpQjtRQUM3QixPQUFPLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVNLE1BQU0sQ0FBQyxjQUFjLENBQzFCLElBQXlCLEVBQ3pCLE9BQXNDO1FBRXRDLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQzVCLElBQUksR0FBRyxlQUFlLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzVDO1FBQ0QsS0FBSyxJQUFJLEdBQUcsSUFBSSxPQUFPLEVBQUU7WUFDdkIsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLEdB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