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
JavaScript
"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}`);
}
}