in lib/generator.js [922:1012]
visitFieldType(value, level, modelName, fieldName) {
if (value.type === 'modelBody') {
const subModelName = _subModelName([modelName, fieldName].join('.'));
this.emit(this.getModelName(subModelName));
} else if (value.type === 'array') {
this.visitType(value);
} else if (value.fieldType === 'array') {
this.pushImports('array');
this.emit('List[');
this.visitFieldType(value.fieldItemType, level, modelName, fieldName);
this.emit(']');
} else if (value.fieldType === 'map') {
this.pushImports('map');
this.emit('Dict[');
this.emit(`${_type(_name(value.keyType))}, `);
this.visitFieldType(value.valueType);
this.emit(']');
} else if (value.type === 'map') {
this.pushImports('map');
this.emit('Dict[');
this.emit(`${_type(_name(value.keyType))}, `);
this.visitFieldType(value.valueType);
this.emit(']');
} else if (value.tag === Tag.TYPE) {
const type = _type(value.lexeme);
this.pushImports(type);
this.emit(`${type}`);
} else if (value.tag === Tag.ID) {
this.visitType(value);
} else if (value.type === 'moduleModel') {
let type = 'model';
const [moduleId, ...models] = value.path;
const modelName = _subModelName(models.map((item) => item.lexeme).join('.'));
const externEx = this.usedExternException.get(_name(moduleId.lexeme));
if (externEx && externEx.has(modelName)) {
type = 'exception';
}
this.emit(this.getModelName(modelName, _name(moduleId)), type);
} else if (value.type === 'subModel') {
const [moduleId, ...rest] = value.path;
const modelName = _subModelName([moduleId.lexeme, ...rest.map((item) => {
return item.lexeme;
})].join('.'));
this.emit(this.getModelName(modelName));
} else if (typeof value.fieldType === 'string'){
const type = _type(value.fieldType);
this.pushImports(type);
this.emit(type);
} else if (value.fieldType.type === 'moduleModel') {
let type = 'model';
const [moduleId, ...models] = value.fieldType.path;
const modelName = _subModelName(models.map((item) => item.lexeme).join('.'));
const externEx = this.usedExternException.get(_name(moduleId.lexeme));
if (externEx && externEx.has(modelName)) {
type = 'exception';
}
this.emit(this.getModelName(modelName, _name(moduleId), type));
} else if (value.fieldType.type === 'moduleTypedef') {
const [moduleId, ...rest] = value.fieldType.path;
const type = rest.map((item) => { return item.lexeme; }).join('.');
this.emit(this.visitTypedef(type, moduleId));
} else if (value.fieldType.type === 'typedef' || value.fieldType.idType === 'typedef') {
this.emit(this.visitTypedef(value.fieldType));
} else if (value.fieldType.type === 'subModel') {
const [moduleId, ...rest] = value.fieldType.path;
const modelName = _subModelName([moduleId.lexeme, ...rest.map((item) => {
return item.lexeme;
})].join('.'));
this.emit(this.getModelName(modelName));
} else if (value.fieldType.type) {
const type = _type(value.fieldType.lexeme);
this.pushImports(type);
this.emit(`${type}`);
} else if (value.fieldType.idType === 'model') {
const predefined = value.fieldType.moduleName ? this.usedExternException.get(value.fieldType.moduleName) : this.predefined;
let type = 'model';
if (predefined[_name(value.fieldType)] && predefined[_name(value.fieldType)].isException) {
type = 'exception';
}
this.emit(this.getModelName(_name(value.fieldType), value.fieldType.moduleName, type));
} else if (value.fieldType.idType === 'module') {
this.emit(this.getModelName('', _type(_name(value.fieldType)), 'module'));
} else if (value.fieldType.idType === 'builtin_model') {
const type = _type(value.fieldType.lexeme);
this.pushImports(type);
this.emit(`${type}`);
}
}