visitToMapField()

in lib/generator.js [1149:1186]


  visitToMapField(fieldValue, fieldName, key, value, level, arr = false) {
    const deep = Math.floor((level - 4) / 2);
    if (fieldValue.type === 'modelBody' || fieldValue.type === 'moduleModel' || 
    fieldValue.type === 'subModel' || fieldValue.idType === 'model' || 
    (fieldValue.fieldType && (fieldValue.fieldType.type === 'moduleModel' || 
    fieldValue.fieldType.idType === 'model' || fieldValue.fieldType.idType === 'builtin_model'))) {
      let realVal = `${value}.to_map()`;
      if(deep > 1) {
        realVal += ` if ${value} else None`;
      }
      this.emitFieldConvert(key, realVal, level, arr);
    } else if (fieldValue.type === 'array' || fieldValue.fieldType === 'array') {
      let subKey  = key;
      if(deep > 1) {
        subKey = `l${deep - 1}`;
        this.emit(`${subKey} = []\n`, level);
      }
      this.emit(`for k${deep} in ${value}:\n`, level);
      this.visitToMapField(fieldValue.fieldItemType || fieldValue.subType, fieldName, `${subKey}`, `k${deep}`, level + 2, true);
      if(deep > 1) {
        this.emitFieldConvert(key, subKey, level, arr);
      }
    } else if (fieldValue.fieldType === 'map' || fieldValue.type === 'map') {
      let subKey  = key;
      if(deep > 1) {
        subKey = `d${deep - 1}`;
        this.emit(`${subKey} = {}\n`, level);
      }
      this.emit(`for k${deep}, v${deep} in self.${fieldName}.items():\n`, level);
      this.visitToMapField(fieldValue.valueType, fieldName, `${subKey}[k${deep}]`, `v${deep}`, level + 2);
      if(deep > 1) {
        this.emitFieldConvert(key, subKey, level, arr);
      }
    } else {
      this.emitFieldConvert(key, value, level, arr);
    }
    
  }