@@ -1950,32 +1950,30 @@ export class MapType<T extends Type> extends AbstractType<schema.MapSchema<Schem
19501950 }
19511951
19521952 private codegenBinaryEncoder ( ctx : BinaryEncoderCodegenContext < BinaryJsonEncoder > , value : JsExpression ) : void {
1953- throw new Error ( 'TODO' ) ;
1954- // const type = this.type ;
1955- // const codegen = ctx. codegen;
1956- // const r = codegen.getRegister(); // array
1957- // const rl = codegen.getRegister (); // array.length
1958- // const ri = codegen.getRegister(); // index
1959- // const rItem = codegen.getRegister(); // item
1960- // const expr = new JsExpression(() => `${rItem} `);
1961- // ctx.js(/* js */ `var ${r} = ${value.use()}, ${rl} = ${r}.length, ${ri} = 0, ${rItem}; `);
1962- // ctx.js(/* js */ `encoder.writeArrHdr(${rl}) ;`);
1963- // ctx.js(/* js */ `for(; ${ri} < ${rl}; ${ri}++) ` + '{' );
1964- // ctx.js(/* js */ `${rItem} = ${r}[${ri}]; `);
1965- // if (ctx instanceof CborEncoderCodegenContext) type.codegenCborEncoder(ctx, expr);
1966- // else if (ctx instanceof MessagePackEncoderCodegenContext) type.codegenMessagePackEncoder(ctx, expr);
1967- // else throw new Error('Unknown encoder');
1968- // ctx.js(` }`);
1953+ const type = this . type ;
1954+ const codegen = ctx . codegen ;
1955+ const r = codegen . var ( value . use ( ) ) ;
1956+ const rKeys = codegen . var ( `Object.keys( ${ r } )` ) ;
1957+ const rKey = codegen . var ( ) ;
1958+ const rLength = codegen . var ( ` ${ rKeys } .length` ) ;
1959+ const ri = codegen . var ( '0' ) ;
1960+ ctx . js ( `encoder.writeObjHdr( ${ rLength } ); `) ;
1961+ ctx . js ( `for(; ${ ri } < ${ rLength } ; ${ ri } ++){ `) ;
1962+ ctx . js ( ` ${ rKey } = ${ rKeys } [ ${ ri } ] ;`) ;
1963+ ctx . js ( `encoder.writeStr( ${ rKey } );` ) ;
1964+ const expr = new JsExpression ( ( ) => ` ${ r } [${ rKey } ] `) ;
1965+ if ( ctx instanceof CborEncoderCodegenContext ) type . codegenCborEncoder ( ctx , expr ) ;
1966+ else if ( ctx instanceof MessagePackEncoderCodegenContext ) type . codegenMessagePackEncoder ( ctx , expr ) ;
1967+ else throw new Error ( 'Unknown encoder' ) ;
1968+ ctx . js ( `}` ) ;
19691969 }
19701970
19711971 public codegenCborEncoder ( ctx : CborEncoderCodegenContext , value : JsExpression ) : void {
1972- throw new Error ( 'TODO' ) ;
1973- // this.codegenBinaryEncoder(ctx, value);
1972+ this . codegenBinaryEncoder ( ctx , value ) ;
19741973 }
19751974
19761975 public codegenMessagePackEncoder ( ctx : MessagePackEncoderCodegenContext , value : JsExpression ) : void {
1977- throw new Error ( 'TODO' ) ;
1978- // this.codegenBinaryEncoder(ctx, value);
1976+ this . codegenBinaryEncoder ( ctx , value ) ;
19791977 }
19801978
19811979 public codegenJsonEncoder ( ctx : JsonEncoderCodegenContext , value : JsExpression ) : void {
@@ -2014,7 +2012,8 @@ export class MapType<T extends Type> extends AbstractType<schema.MapSchema<Schem
20142012 }
20152013
20162014 public codegenCapacityEstimator ( ctx : CapacityEstimatorCodegenContext , value : JsExpression ) : void {
2017- throw new Error ( 'TODO CAP' ) ;
2015+ ctx . codegen . js ( `size += maxEncodingCapacity(${ value . use ( ) } );` ) ;
2016+ // throw new Error('TODO CAP');
20182017 // const codegen = ctx.codegen;
20192018 // ctx.inc(MaxEncodingOverhead.Array);
20202019 // const rLen = codegen.var(`${value.use()}.length`);
0 commit comments