readExpression method

Expression readExpression([
  1. 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),
      });
  }
}