readExpression method
Expression
readExpression(
[ - String from = 'json'
])
Implementation
Expression readExpression([String from = 'json']) {
final fieldDef = this.original is FieldDefinitionNode
? this.original as FieldDefinitionNode
: null;
final isJoinRecord = fieldDef?.directives
.getDirectiveValue("relationship", "properties")
.stringValueOrNull !=
null;
var selectName = this.name;
if (isJoinRecord) {
selectName += 'Connection';
}
late Expression jsonExpr;
if (isJoinRecord) {
jsonExpr = refer("GraphClientConfig.getDeep").call([
refer(from),
literalString(selectName),
literalString(isList ? "edges" : "edge"),
]);
} else {
jsonExpr = refer(from).index(literalString(selectName));
}
switch (this.typeNode.toRawType().toLowerCase()) {
case 'float':
return refer('GraphClientConfig.doubleOf').call([jsonExpr]);
case 'double':
return refer('GraphClientConfig.doubleOf').call([jsonExpr]);
case 'int':
return refer('GraphClientConfig.intOf').call([jsonExpr]);
case 'string':
case 'boolean':
case 'id':
return jsonExpr.asA(refer(this.nullableDartTypeName));
default:
return refer('GraphClientConfig.read${isList ? 'List' : ''}').call([
jsonExpr
], {
'typeName':
literalString(typeNode.toDartType(withNullability: false)),
'isNullable': literalBool(!isNonNull),
});
}
}