UNPKG

tolk-codegen

Version:

## Example generator ### Create builder file in root folder ``builder.ts``

63 lines (62 loc) 2.05 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseCell = parseCell; exports.sliceParser = sliceParser; const core_1 = require("@ton/core"); const decorators_1 = require("../decorators"); const travel_1 = require("../travel"); const parser = { [decorators_1.DataType.SLICE]: (slice, field) => { if (field.size) { return (0, core_1.beginCell)().storeBits(slice.loadBits(field.size)).asSlice(); } else { return (0, core_1.beginCell)().storeBits(slice.loadBits(slice.remainingBits)).asSlice(); } }, [decorators_1.DataType.BIT]: (slice, field) => { return slice.loadBit(); }, [decorators_1.DataType.COINS]: (slice, field) => { return slice.loadCoins(); }, [decorators_1.DataType.INT]: (slice, field) => { return slice.loadIntBig(field.size); }, [decorators_1.DataType.UINT]: (slice, field) => { return slice.loadUintBig(field.size); }, [decorators_1.DataType.REF]: (slice, field) => { if (field.type == core_1.Cell) { return slice.loadRef(); } else { return parseCell(slice.loadRef(), field.type); } }, [decorators_1.DataType.ADDRESS]: (slice, field) => { return slice.loadMaybeAddress(); }, [decorators_1.DataType.STRING_TAIL]: (slice, field) => { return slice.loadStringTail(); }, [decorators_1.DataType.DICT]: (slice, field) => { return slice.loadDict(field.dict.key, field.dict.value); }, }; function parseCell(cell, type) { return sliceParser(cell.beginParse(), type); } function sliceParser(slice, type) { const object = new type(); (0, travel_1.travel)(type, (prototype, field) => { if (!parser[field.buildType]) { throw `${field.buildType} data type`; } if (field.mayBe && !slice.loadBit()) { return; } object[field.name] = parser[field.buildType](slice, field); }); return object; }