@@ -156,11 +156,14 @@ abstract class ExportsWalker {
156
156
export class NEARBindingsBuilder extends ExportsWalker {
157
157
private typeMapping : { [ key : string ] : string } = {
158
158
"i32" : "Integer" ,
159
+ "u32" : "Integer" ,
160
+ "i64" : "String" ,
161
+ "u64" : "String" ,
159
162
"String" : "String" ,
160
163
"bool" : "Boolean"
161
164
} ;
162
165
163
- private nonNullableTypes = [ "i32" , "bool" ] ;
166
+ private nonNullableTypes = [ "i32" , "u32" , "i64" , "u64" , " bool"] ;
164
167
165
168
private sb : string [ ] = [ ] ;
166
169
private generatedEncodeFunctions = new Set < string > ( ) ;
@@ -265,22 +268,14 @@ export class NEARBindingsBuilder extends ExportsWalker {
265
268
}
266
269
267
270
private generateHandlerMethods ( valuePrefix : string , fields : any [ ] ) : void {
268
- for ( let fieldType in this . typeMapping ) {
269
- let setterType = this . typeMapping [ fieldType ] ;
270
- let matchingFields = fields . filter ( field => field . type . toString ( ) == fieldType ) ;
271
- if ( matchingFields . length > 0 ) {
272
- this . sb . push ( `set${ setterType } (name: string, value: ${ fieldType } ): void {` ) ;
273
- matchingFields . forEach ( field => {
274
- this . sb . push ( `if (name == "${ field . name } ") {
275
- ${ valuePrefix } ${ field . name } = value;
276
- return;
277
- }` ) ;
278
- } ) ;
279
- this . sb . push ( `
280
- super.set${ setterType } (name, value);
281
- }` ) ;
282
- }
271
+ function fieldsWithTypes ( types : string [ ] ) {
272
+ return fields . filter ( field => types . indexOf ( field . type . toString ( ) ) != - 1 ) ;
283
273
}
274
+
275
+ this . generateBasicSetterHandlers ( valuePrefix , "Integer" , "i64" , fieldsWithTypes ( [ "i32" , "u32" ] ) ) ;
276
+ this . generateBasicSetterHandlers ( valuePrefix , "String" , "String" , fieldsWithTypes ( [ "String" , "i64" , "u64" ] ) ) ;
277
+ this . generateBasicSetterHandlers ( valuePrefix , "Boolean" , "bool" , fieldsWithTypes ( [ "bool" ] ) ) ;
278
+
284
279
this . sb . push ( "setNull(name: string): void {" ) ;
285
280
fields . forEach ( ( field ) => {
286
281
this . sb . push ( `if (name == "${ field . name } ") {
@@ -314,6 +309,29 @@ export class NEARBindingsBuilder extends ExportsWalker {
314
309
}` ) ;
315
310
}
316
311
312
+ private generateBasicSetterHandlers ( valuePrefix : string , setterType : string , setterValueType : string , matchingFields : any [ ] ) {
313
+ if ( matchingFields . length > 0 ) {
314
+ this . sb . push ( `set${ setterType } (name: string, value: ${ setterValueType } ): void {` ) ;
315
+ matchingFields . forEach ( field => {
316
+ if ( setterType == "String" && field . type != "String" ) {
317
+ let className = field . type == "u64" ? "U64" : "I64" ;
318
+ this . sb . push ( `if (name == "${ field . name } ") {
319
+ ${ valuePrefix } ${ field . name } = ${ className } .parseInt(value);
320
+ return;
321
+ }` ) ;
322
+ } else {
323
+ this . sb . push ( `if (name == "${ field . name } ") {
324
+ ${ valuePrefix } ${ field . name } = <${ field . type } >value;
325
+ return;
326
+ }` ) ;
327
+ }
328
+ } ) ;
329
+ this . sb . push ( `
330
+ super.set${ setterType } (name, value);
331
+ }` ) ;
332
+ }
333
+ }
334
+
317
335
private generatePushHandler ( valuePrefix : string , fields : any [ ] ) {
318
336
fields . forEach ( ( field ) => {
319
337
if ( ! ( field . type . toString ( ) in this . typeMapping ) ) {
@@ -328,10 +346,21 @@ export class NEARBindingsBuilder extends ExportsWalker {
328
346
private generateArrayHandlerMethods ( valuePrefix : string , fieldType : Type ) : void {
329
347
let setterType = this . typeMapping [ fieldType . toString ( ) ] ;
330
348
if ( setterType ) {
331
- this . sb . push ( `set${ setterType } (name: string, value: ${ fieldType } ): void {
332
- ${ valuePrefix } .push(value);
349
+ let valueType = fieldType . toString ( ) ;
350
+ if ( valueType == "u64" || valueType == "i64" ) {
351
+ let className = valueType == "u64" ? "U64" : "I64" ;
352
+ this . sb . push ( `setString(name: string, value: string): void {
353
+ ${ valuePrefix } .push(${ className } .parseInt(value));
354
+ }` ) ;
355
+ } else {
356
+ if ( valueType == "u32" || valueType == "i32" ) {
357
+ valueType = "i64"
358
+ }
359
+ this . sb . push ( `set${ setterType } (name: string, value: ${ valueType } ): void {
360
+ ${ valuePrefix } .push(<${ fieldType } >value);
361
+ }` ) ;
333
362
}
334
- setNull(name: string): void {
363
+ this . sb . push ( ` setNull(name: string): void {
335
364
${ valuePrefix } .push(<${ fieldType } >null);
336
365
}
337
366
pushArray(name: string): bool {
@@ -504,7 +533,11 @@ export class NEARBindingsBuilder extends ExportsWalker {
504
533
} else {
505
534
// Basic types
506
535
if ( this . nonNullableTypes . indexOf ( fieldType . toString ( ) ) != - 1 ) {
507
- this . sb . push ( `encoder.set${ setterType } (${ fieldExpr } , ${ sourceExpr } );` ) ;
536
+ if ( [ "i64" , "u64" ] . indexOf ( fieldType . toString ( ) ) != - 1 ) {
537
+ this . sb . push ( `encoder.set${ setterType } (${ fieldExpr } , ${ sourceExpr } .toString());` ) ;
538
+ } else {
539
+ this . sb . push ( `encoder.set${ setterType } (${ fieldExpr } , ${ sourceExpr } );` ) ;
540
+ }
508
541
} else {
509
542
this . sb . push ( `if (${ sourceExpr } != null) {
510
543
encoder.set${ setterType } (${ fieldExpr } , ${ sourceExpr } );
0 commit comments