in lib/generator.js [1238:1298]
visitFromField(fieldValue, fieldName, key, value, level, arr = false) {
const deep = Math.floor((level - 4) / 2);
if (fieldValue.type === 'modelBody') {
const subModelName = _subModelName(fieldName);
this.emit(`temp_model = ${this.getModelName(subModelName)}()\n`, level);
this.emitFieldConvert(key, `temp_model.from_map(${value})`, level, arr);
} else if (fieldValue.type === 'array' || fieldValue.fieldType === 'array') {
this.emit(`for k${deep} in ${value}:\n`, level);
let subKey = key;
if(deep > 1) {
subKey = `l${deep - 1}`;
this.emit(`${subKey} = []\n`, level + 2);
}
this.visitFromField(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') {
this.emit(`for k${deep}, v${deep} in ${value}.items():\n`, level);
let subKey = key;
if(deep > 1) {
subKey = `d${deep - 1}`;
this.emit(`${subKey} = {}\n`, level + 2);
}
this.visitFromField(fieldValue.valueType, fieldName, `${subKey}[k${deep}]`, `v${deep}`, level + 2);
if(deep > 1) {
this.emitFieldConvert(key, subKey, level, arr);
}
} else if (fieldValue.type === 'moduleModel' ||
(fieldValue.fieldType && fieldValue.fieldType.type === 'moduleModel')) {
const [moduleId, ...rest] = fieldValue.path || fieldValue.fieldType.path;
const modelName = _subModelName(rest.map((item) => {
return item.lexeme;
}).join('.'));
this.emit(`temp_model = ${this.getModelName(modelName, _name(moduleId))}()\n`, level);
this.emitFieldConvert(key, `temp_model.from_map(${value})`, level, arr);
} else if (fieldValue.type === 'subModel') {
const [moduleId, ...rest] = fieldValue.path;
const subModelName = _subModelName([moduleId.lexeme, ...rest.map((item) => {
return item.lexeme;
})].join('.'));
this.emit(`temp_model = ${this.getModelName(subModelName)}()\n`, level);
this.emitFieldConvert(key, `temp_model.from_map(${value})`, level, arr);
} else if (fieldValue.idType === 'model') {
const modelName = _type(_name(fieldValue));
this.emit(`temp_model = ${this.getModelName(modelName)}()\n`, level);
this.emitFieldConvert(key, `temp_model.from_map(${value})`, level, arr);
} else if (fieldValue.fieldType && fieldValue.fieldType.idType === 'model') {
const modelName = _type(_name(fieldValue.fieldType));
this.emit(`temp_model = ${this.getModelName(modelName)}()\n`, level);
this.emitFieldConvert(key, `temp_model.from_map(${value})`, level, arr);
} else if (fieldValue.fieldType && fieldValue.fieldType.idType === 'builtin_model') {
const typeName = _type(_name(fieldValue.fieldType));
this.pushImports(typeName);
this.emit(`temp_model = ${typeName}()\n`, level);
this.emitFieldConvert(key, `temp_model.from_map(${value})`, level, arr);
} else {
this.emitFieldConvert(key, value, level, arr);
}
}