in packages/jsii-pacmak/lib/targets/python/type-name.ts [87:113]
export function toTypeName(ref?: OptionalValue | TypeReference): TypeName {
if (ref == null) {
return Primitive.NONE;
}
const type = isOptionalValue(ref) ? ref.type : ref;
const optional = isOptionalValue(ref) && ref.optional;
let result: TypeName = Primitive.ANY;
if (isPrimitiveTypeReference(type)) {
result = Primitive.of(type);
} else if (isCollectionTypeReference(type)) {
const elt = toTypeName(type.collection.elementtype);
if (type.collection.kind === CollectionKind.Array) {
result = new List(elt);
} else {
result = new Dict(elt);
}
} else if (isUnionTypeReference(type)) {
result = new Union(type.union.types.map(toTypeName));
} else if (isNamedTypeReference(type)) {
result = new UserType(type.fqn);
}
return optional ? new Optional(result) : result;
}