@@ -166,6 +166,16 @@ def __init__(self, DEBUG: bool, target: Target, outdir: str, **kwargs):
166166
167167
168168
169+ /* @internal */
170+ export function encodeUint128 (inputVal: bigint): number {
171+ if (inputVal >= 0x10000000000000000000000000000000n) throw "U128s cannot exceed 128 bits";
172+ const cArrayPointer = wasm.TS_malloc(16 + 8);
173+ const arrayLengthView = new BigUint64Array(wasm.memory.buffer, cArrayPointer, 1);
174+ arrayLengthView[0] = BigInt(16);
175+ const arrayMemoryView = new Uint8Array(wasm.memory.buffer, cArrayPointer + 8, 16);
176+ for (var i = 0; i < 16; i++) arrayMemoryView[i] = Number((inputVal >> BigInt(i)*8n) & 0xffn);
177+ return cArrayPointer;
178+ }
169179/* @internal */
170180export function encodeUint8Array (inputArray: Uint8Array|null): number {
171181 if (inputArray == null) return 0;
@@ -210,6 +220,21 @@ def __init__(self, DEBUG: bool, target: Target, outdir: str, **kwargs):
210220 return Number(len % (2n ** 32n));
211221}
212222/* @internal */
223+ export function decodeUint128 (arrayPointer: number, free = true): bigint {
224+ const arraySize = getArrayLength(arrayPointer);
225+ if (arraySize != 16) throw "Need 16 bytes for a uint128";
226+ const actualArrayViewer = new Uint8Array(wasm.memory.buffer, arrayPointer + 8, arraySize);
227+ var val = 0n;
228+ for (var i = 0; i < 16; i++) {
229+ val <<= 8n;
230+ val |= BigInt(actualArrayViewer[i]!);
231+ }
232+ if (free) {
233+ wasm.TS_free(arrayPointer);
234+ }
235+ return val;
236+ }
237+ /* @internal */
213238export function decodeUint8Array (arrayPointer: number, free = true): Uint8Array {
214239 const arraySize = getArrayLength(arrayPointer);
215240 const actualArrayViewer = new Uint8Array(wasm.memory.buffer, arrayPointer + 8, arraySize);
@@ -678,6 +703,7 @@ def __init__(self, DEBUG: bool, target: Target, outdir: str, **kwargs):
678703 self .file_ext = ".mts"
679704 self .ptr_c_ty = "uint64_t"
680705 self .ptr_native_ty = "bigint"
706+ self .u128_native_ty = "bigint"
681707 self .usize_c_ty = "uint32_t"
682708 self .usize_native_ty = "number"
683709 self .native_zero_ptr = "0n"
@@ -760,6 +786,8 @@ def cleanup_converted_native_array(self, ty_info, arr_name):
760786 def primitive_arr_from_hu (self , arr_ty , fixed_len , arr_name ):
761787 mapped_ty = arr_ty .subty
762788 inner = arr_name
789+ if arr_ty .rust_obj == "LDKU128" :
790+ return ("bindings.encodeUint128(" + inner + ")" , "" )
763791 if fixed_len is not None :
764792 assert mapped_ty .c_ty == "int8_t"
765793 inner = "bindings.check_arr_len(" + arr_name + ", " + fixed_len + ")"
@@ -777,7 +805,9 @@ def primitive_arr_from_hu(self, arr_ty, fixed_len, arr_name):
777805
778806 def primitive_arr_to_hu (self , arr_ty , fixed_len , arr_name , conv_name ):
779807 mapped_ty = arr_ty .subty
780- if mapped_ty .c_ty == "uint8_t" or mapped_ty .c_ty == "int8_t" :
808+ if arr_ty .rust_obj == "LDKU128" :
809+ return "const " + conv_name + ": bigint = bindings.decodeUint128(" + arr_name + ");"
810+ elif mapped_ty .c_ty == "uint8_t" or mapped_ty .c_ty == "int8_t" :
781811 return "const " + conv_name + ": Uint8Array = bindings.decodeUint8Array(" + arr_name + ");"
782812 elif mapped_ty .c_ty == "uint64_t" or mapped_ty .c_ty == "int64_t" :
783813 return "const " + conv_name + ": bigint[] = bindings.decodeUint64Array(" + arr_name + ");"
0 commit comments