You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I wrote the following for myself as I wanted to use D-Bus natives and not send JSON all over the place and I didn't see the library provide anything for using them Variants
import {Variant} from "dbus-next";
export function serialize(obj: any): Variant<any> | undefined {
if (obj === undefined) return undefined;
if (typeof obj == 'function') throw new Error("can't serialize function");
const signature = (({
'object': () => obj === null? 'o':(Array.isArray(obj)? 'av':'a{sv}'),
'string': () => 's',
'number': () => 'd',
'boolean': () => 'b',
'symbol': () => 's',
'bigint': () => 'x'
} as any)[typeof obj]) ();
let _ = obj;
if (typeof obj == 'object') {
if (obj === null) _ = '/dev/null';
else {
_ = Array.isArray(obj)? []:{};
for (const k in obj) {
if (obj[k] !== undefined) _[k] = serialize(obj[k]);
}
}
}
return new Variant(signature, _);
};
type Key = string | number | symbol;
export function deserialize(v: Variant): any {
const sig = v.signature.slice(0, 2);
if (sig == 'av') return v.value.map(deserialize);
else if (sig == 'a{') {
if (sig[4] !== '}') throw new Error("invalid variant signature");
//const kt = sig[2]; // unused
const vt = sig[3];
return Object.entries(v.value).reduce(
(acc: {[x: Key]: any}, [key, value]: [Key, any]) =>
({...acc, [key]: vt === 'v'? deserialize(value):value}), {}
);
}
else if (sig == 'o') return v.value === '/dev/null'? null:v.value;
else return v.value;
}
but like, would be cool if the library did this automatically. convert param objects and returns into a{sv} and variant type arrays into av. so for example you could
someObj = {};
@property({signature: 'v'}) // or just @property({})
get Configuration() {return someObj}
set Configuration(newObj) {someObj = newObj}
instead of having to
someObj = {};
@property({signature: 'v'}) // or just @property({})
get Configuration() {return serialize(someObj)}
set Configuration(newObj) {someObj = deserialize(newObj)}
The text was updated successfully, but these errors were encountered:
I wrote the following for myself as I wanted to use D-Bus natives and not send JSON all over the place and I didn't see the library provide anything for using them Variants
but like, would be cool if the library did this automatically. convert param objects and returns into
a{sv}
and variant type arrays intoav
. so for example you couldinstead of having to
The text was updated successfully, but these errors were encountered: