HarshvardhanCn01/Voice-Assistant
0
1"use strict";2module.exports = encoder;3 4var Enum = require("./enum"),5 types = require("./types"),6 util = require("./util");7 8/**9 * Generates a partial message type encoder.10 * @param {Codegen} gen Codegen instance11 * @param {Field} field Reflected field12 * @param {number} fieldIndex Field index13 * @param {string} ref Variable reference14 * @returns {Codegen} Codegen instance15 * @ignore16 */17function genTypePartial(gen, field, fieldIndex, ref) {18 return field.resolvedType.group19 ? gen("types[%i].encode(%s,w.uint32(%i)).uint32(%i)", fieldIndex, ref, (field.id << 3 | 3) >>> 0, (field.id << 3 | 4) >>> 0)20 : gen("types[%i].encode(%s,w.uint32(%i).fork()).ldelim()", fieldIndex, ref, (field.id << 3 | 2) >>> 0);21}22 23/**24 * Generates an encoder specific to the specified message type.25 * @param {Type} mtype Message type26 * @returns {Codegen} Codegen instance27 */28function encoder(mtype) {29 /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */30 var gen = util.codegen(["m", "w"], mtype.name + "$encode")31 ("if(!w)")32 ("w=Writer.create()");33 34 var i, ref;35 36 // "when a message is serialized its known fields should be written sequentially by field number"37 var fields = /* initializes */ mtype.fieldsArray.slice().sort(util.compareFieldsById);38 39 for (var i = 0; i < fields.length; ++i) {40 var field = fields[i].resolve(),41 index = mtype._fieldsArray.indexOf(field),42 type = field.resolvedType instanceof Enum ? "int32" : field.type,43 wireType = types.basic[type];44 ref = "m" + util.safeProp(field.name);45 46 // Map fields47 if (field.map) {48 gen49 ("if(%s!=null&&Object.hasOwnProperty.call(m,%j)){", ref, field.name) // !== undefined && !== null50 ("for(var ks=Object.keys(%s),i=0;i<ks.length;++i){", ref)51 ("w.uint32(%i).fork().uint32(%i).%s(ks[i])", (field.id << 3 | 2) >>> 0, 8 | types.mapKey[field.keyType], field.keyType);52 if (wireType === undefined) gen53 ("types[%i].encode(%s[ks[i]],w.uint32(18).fork()).ldelim().ldelim()", index, ref); // can't be groups54 else gen55 (".uint32(%i).%s(%s[ks[i]]).ldelim()", 16 | wireType, type, ref);56 gen57 ("}")58 ("}");59 60 // Repeated fields61 } else if (field.repeated) { gen62 ("if(%s!=null&&%s.length){", ref, ref); // !== undefined && !== null63 64 // Packed repeated65 if (field.packed && types.packed[type] !== undefined) { gen66 67 ("w.uint32(%i).fork()", (field.id << 3 | 2) >>> 0)68 ("for(var i=0;i<%s.length;++i)", ref)69 ("w.%s(%s[i])", type, ref)70 ("w.ldelim()");71 72 // Non-packed73 } else { gen74 75 ("for(var i=0;i<%s.length;++i)", ref);76 if (wireType === undefined)77 genTypePartial(gen, field, index, ref + "[i]");78 else gen79 ("w.uint32(%i).%s(%s[i])", (field.id << 3 | wireType) >>> 0, type, ref);80 81 } gen82 ("}");83 84 // Non-repeated85 } else {86 if (field.optional) gen87 ("if(%s!=null&&Object.hasOwnProperty.call(m,%j))", ref, field.name); // !== undefined && !== null88 89 if (wireType === undefined)90 genTypePartial(gen, field, index, ref);91 else gen92 ("w.uint32(%i).%s(%s)", (field.id << 3 | wireType) >>> 0, type, ref);93 94 }95 }96 97 return gen98 ("return w");99 /* eslint-enable no-unexpected-multiline, block-scoped-var, no-redeclare */100}101 