UNPKG

dbus-sdk

Version:

A Node.js SDK for interacting with DBus, enabling seamless service calling and exposure with TypeScript support

89 lines (88 loc) 4.85 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SignedValueToTypeClassInstance = SignedValueToTypeClassInstance; const DBusByte_1 = require("./datatypes/DBusByte"); const DBusBoolean_1 = require("./datatypes/DBusBoolean"); const DBusInt16_1 = require("./datatypes/DBusInt16"); const DBusUint16_1 = require("./datatypes/DBusUint16"); const DBusUint32_1 = require("./datatypes/DBusUint32"); const DBusInt32_1 = require("./datatypes/DBusInt32"); const DBusSignature_1 = require("./datatypes/DBusSignature"); const DBusString_1 = require("./datatypes/DBusString"); const DBusObjectPath_1 = require("./datatypes/DBusObjectPath"); const DBusInt64_1 = require("./datatypes/DBusInt64"); const DBusUint64_1 = require("./datatypes/DBusUint64"); const DBusDouble_1 = require("./datatypes/DBusDouble"); const DBusUnixFD_1 = require("./datatypes/DBusUnixFD"); const DBusArray_1 = require("./datatypes/DBusArray"); const DBusStruct_1 = require("./datatypes/DBusStruct"); const DBusDictEntry_1 = require("./datatypes/DBusDictEntry"); const DBusVariant_1 = require("./datatypes/DBusVariant"); const Errors_1 = require("./Errors"); /** * An array of DBus type class constructors used for mapping DBus type signatures to their corresponding class implementations. * This array includes constructors for all supported DBus data types, both basic and container types, to facilitate type conversion and instantiation. */ const typeClassConstructors = [ DBusByte_1.DBusByte, DBusBoolean_1.DBusBoolean, DBusInt16_1.DBusInt16, DBusUint16_1.DBusUint16, DBusUint32_1.DBusUint32, DBusInt32_1.DBusInt32, DBusSignature_1.DBusSignature, DBusString_1.DBusString, DBusObjectPath_1.DBusObjectPath, DBusInt64_1.DBusInt64, DBusUint64_1.DBusUint64, DBusDouble_1.DBusDouble, DBusUnixFD_1.DBusUnixFD, DBusArray_1.DBusArray, DBusStruct_1.DBusStruct, DBusDictEntry_1.DBusDictEntry, DBusVariant_1.DBusVariant ]; /** * Converts a DBusSignedValue instance to a corresponding DBusTypeClass instance based on its type signature. * This function maps the signature of the input value to the appropriate DBus data type class (e.g., DBusByte, DBusString) * and recursively processes container types (e.g., arrays, structs) to build nested structures. * * @param value - The DBusSignedValue instance to convert, containing a value and its associated DBus type signature. * @returns A DBusTypeClass instance representing the input value in its specific DBus type class form. * @throws {SignatureError} If the type signature of the input value is unknown or unsupported. */ function SignedValueToTypeClassInstance(value) { const signature = value.$signature; // Handle basic types with direct mapping to DBusTypeClass-derived classes switch (signature) { // Basic data types case 'y': return new DBusByte_1.DBusByte(value.$value); case 'b': return new DBusBoolean_1.DBusBoolean(value.$value); case 'n': return new DBusInt16_1.DBusInt16(value.$value); case 'q': return new DBusUint16_1.DBusUint16(value.$value); case 'u': return new DBusUint32_1.DBusUint32(value.$value); case 'i': return new DBusInt32_1.DBusInt32(value.$value); case 'g': return new DBusSignature_1.DBusSignature(value.$value); case 's': return new DBusString_1.DBusString(value.$value); case 'o': return new DBusObjectPath_1.DBusObjectPath(value.$value); case 'x': return new DBusInt64_1.DBusInt64(value.$value); case 't': return new DBusUint64_1.DBusUint64(value.$value); case 'd': return new DBusDouble_1.DBusDouble(value.$value); case 'h': return new DBusUnixFD_1.DBusUnixFD(value.$value); // Container data types case 'a': const arrayItemSignature = value.$arrayItemSignature; const arrayValues = value.$value.map((item) => SignedValueToTypeClassInstance(item)); return new DBusArray_1.DBusArray(arrayValues, typeClassConstructors.find(typeClassConstructor => typeClassConstructor.type === arrayItemSignature)); case '(': const structValues = value.$value.map((item) => SignedValueToTypeClassInstance(item)); return new DBusStruct_1.DBusStruct(structValues); case '{': const dictValues = value.$value.map((item) => SignedValueToTypeClassInstance(item)); return new DBusDictEntry_1.DBusDictEntry(dictValues); case 'v': const nestedValue = SignedValueToTypeClassInstance(value.$value); return new DBusVariant_1.DBusVariant(nestedValue); default: throw new Errors_1.SignatureError(`Unknown DBus type: ${signature}`); } }