// This example shows how decorators can be used with plain JavaScript. It's otherwise identical to // the README example. /*eslint-disable strict, no-console*/ var protobuf = require("../light"); var Type = protobuf.Type, Field = protobuf.Field, OneOf = protobuf.OneOf; function AwesomeSubMessage(properties) { protobuf.Message.call(this, properties); } (AwesomeSubMessage.prototype = Object.create(protobuf.Message)).constructor = AwesomeSubMessage; Field.d(1, "string", "optional", "awesome default string")(AwesomeSubMessage.prototype, "awesomeField"); var AwesomeEnum = { ONE: 1, TWO: 2 }; Type.d("SuperAwesomeMessage")(AwesomeMessage); function AwesomeMessage(properties) { protobuf.Message.call(this, properties); } (AwesomeMessage.prototype = Object.create(protobuf.Message)).constructor = AwesomeMessage; Field.d(1, "string", "optional", "awesome default string")(AwesomeMessage.prototype, "awesomeField"); Field.d(2, AwesomeSubMessage)(AwesomeMessage.prototype, "awesomeSubMessage"); Field.d(3, AwesomeEnum, "optional", AwesomeEnum.ONE)(AwesomeMessage.prototype, "awesomeEnum"); OneOf.d("awesomeSubMessage", "awesomeEnum")(AwesomeMessage.prototype, "which"); // example code var message = new AwesomeMessage({ awesomeField: "hello" }); var buffer = AwesomeMessage.encode(message).finish(); var decoded = AwesomeMessage.decode(buffer); console.log(decoded); console.log("internal name: " + AwesomeMessage.$type.name);