tolk-codegen
Version:
## Example generator ### Create builder file in root folder ``builder.ts``
65 lines (64 loc) • 2.17 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.buildCell = buildCell;
const core_1 = require("@ton/core");
const decorators_1 = require("../decorators");
const travel_1 = require("../travel");
const build = {
[decorators_1.DataType.SLICE]: (builder, value, field) => {
if (value instanceof core_1.Slice) {
builder.storeSlice(value);
}
else {
builder.storeSlice(buildCell(value).asSlice());
}
},
[decorators_1.DataType.BIT]: (builder, value, field) => {
builder.storeBit(value);
},
[decorators_1.DataType.COINS]: (builder, value, field) => {
builder.storeCoins(value);
},
[decorators_1.DataType.INT]: (builder, value, field) => {
builder.storeInt(value, field.size);
},
[decorators_1.DataType.UINT]: (builder, value, field) => {
builder.storeUint(value, field.size);
},
[decorators_1.DataType.REF]: (builder, value, field) => {
if (value instanceof core_1.Cell) {
builder.storeRef(value);
}
else {
builder.storeRef(buildCell(value));
}
},
[decorators_1.DataType.ADDRESS]: (builder, value, field) => {
builder.storeAddress(value);
},
[decorators_1.DataType.STRING_TAIL]: (builder, value, field) => {
builder.storeStringTail(value);
},
[decorators_1.DataType.DICT]: (builder, value, field) => {
var _a;
builder.storeDict(value, (_a = field.dict) === null || _a === void 0 ? void 0 : _a.key, field.dict.value);
}
};
function buildCell(object, builder = (0, core_1.beginCell)()) {
(0, travel_1.travel)(object.constructor, (prototype, field) => {
if (!build[field.buildType]) {
throw `${field.buildType} data type`;
}
const value = object[field.name];
if (field.mayBe) {
if (value) {
builder.storeBit(true);
}
else {
builder.storeBit(false);
}
}
build[field.buildType](builder, object[field.name], field);
});
return builder.endCell();
}