UNPKG

@iotize/tap

Version:

IoTize Device client for Javascript

66 lines 5.92 kB
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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