| 112 | */ |
| 113 | class AbiCoder { |
| 114 | #getCoder(param) { |
| 115 | if (param.isArray()) { |
| 116 | return new array_js_1.ArrayCoder(this.#getCoder(param.arrayChildren), param.arrayLength, param.name); |
| 117 | } |
| 118 | if (param.isTuple()) { |
| 119 | return new tuple_js_1.TupleCoder(param.components.map((c) => this.#getCoder(c)), param.name); |
| 120 | } |
| 121 | switch (param.baseType) { |
| 122 | case "address": |
| 123 | return new address_js_1.AddressCoder(param.name); |
| 124 | case "bool": |
| 125 | return new boolean_js_1.BooleanCoder(param.name); |
| 126 | case "string": |
| 127 | return new string_js_1.StringCoder(param.name); |
| 128 | case "bytes": |
| 129 | return new bytes_js_1.BytesCoder(param.name); |
| 130 | case "": |
| 131 | return new null_js_1.NullCoder(param.name); |
| 132 | } |
| 133 | // u?int[0-9]* |
| 134 | let match = param.type.match(paramTypeNumber); |
| 135 | if (match) { |
| 136 | let size = parseInt(match[2] || "256"); |
| 137 | (0, index_js_1.assertArgument)(size !== 0 && size <= 256 && (size % 8) === 0, "invalid " + match[1] + " bit length", "param", param); |
| 138 | return new number_js_1.NumberCoder(size / 8, (match[1] === "int"), param.name); |
| 139 | } |
| 140 | // bytes[0-9]+ |
| 141 | match = param.type.match(paramTypeBytes); |
| 142 | if (match) { |
| 143 | let size = parseInt(match[1]); |
| 144 | (0, index_js_1.assertArgument)(size !== 0 && size <= 32, "invalid bytes length", "param", param); |
| 145 | return new fixed_bytes_js_1.FixedBytesCoder(size, param.name); |
| 146 | } |
| 147 | (0, index_js_1.assertArgument)(false, "invalid type", "type", param.type); |
| 148 | } |
| 149 | /** |
| 150 | * Get the default values for the given %%types%%. |
| 151 | * |