0.5.0 • Published 5 months ago
capnp-schema-gen v0.5.0
capnp-schema-gen
A Cap'n Proto schema and setter function generator compatible with Pooya Parsa's capnp-es.
Given an arbitrary JavaScript object:
const data = {
name: 'John',
email: 'john@doe.com',
friends: [
{
name: 'Jane',
email: 'jane@doe.com'
}
]
}
You can generate an inferred Cap'n Proto schema:
const schema = generateSchema('Person', data)
console.log(schema)
@0xe3603ad8685d0f0c;
struct Person {
name @0 :Text;
email @1 :Text;
friends @2 :List(PersonFriendsItem);
}
struct PersonFriendsItem {
name @0 :Text;
email @1 :Text;
}
And an accompanying setter function:
const setter = generateSetterFunction(data)
console.log(setter)
function setter(capnp, schemaClass, data) {
const message = new capnp.Message();
const obj = message.initRoot(schemaClass);
if (typeof data.name !== 'undefined') {
obj.name = data.name;
}
if (typeof data.email !== 'undefined') {
obj.email = data.email;
}
const friendsList = obj._initFriends(data.friends.length);
for (let i = 0; i < data.friends.length; i++) {
if (data.friends[i] !== null && typeof data.friends[i] === 'object') {
const friendsItem = friendsList.get(i);
if (typeof data.friends[i].name !== 'undefined') {
friendsItem.name = data.friends[i].name;
}
if (typeof data.friends[i].email !== 'undefined') {
friendsItem.email = data.friends[i].email;
}
}
}
return message.toArrayBuffer();
}
License
MIT