Skip to content
Merged
20 changes: 20 additions & 0 deletions v2/pkg/engine/datasource/grpc_datasource/compiler.go
Original file line number Diff line number Diff line change
Expand Up @@ -708,6 +708,26 @@ func (p *RPCCompiler) buildRequiredFieldsMessage(inputMessage Message, rpcMessag
contextList.Append(element)
}

argsRPCField := rpcMessage.Fields.ByName("field_args")

if argsRPCField == nil {
return rootMessage, nil
}

argsSchemaField := inputMessage.GetField("field_args")
if argsSchemaField == nil {
return nil, fmt.Errorf("field_args field not found in message %s", inputMessage.Name)
}

argsMessage := p.doc.Messages[argsSchemaField.MessageRef]
args, err := p.buildProtoMessage(argsMessage, argsRPCField.Message, data)
if err != nil {
return nil, err
}
if err := p.setMessageValue(rootMessage, argsRPCField.Name, protoref.ValueOfMessage(args)); err != nil {
return nil, err
}

return rootMessage, nil
}

Expand Down
19 changes: 19 additions & 0 deletions v2/pkg/engine/datasource/grpc_datasource/execution_plan.go
Original file line number Diff line number Diff line change
Expand Up @@ -1427,6 +1427,25 @@ func (r *rpcPlanningContext) createRequiredFieldsRPCCall(callIndex int, subgraph
return RPCCall{}, err
}

if len(requiredField.fieldArguments) > 0 {
fieldArgsMessage := &RPCMessage{
Name: rpcConfig.RPC + "Args",
}
fieldArgsMessage.Fields = make(RPCFields, len(requiredField.fieldArguments))
for i, arg := range requiredField.fieldArguments {
field, err := r.createRPCFieldFromFieldArgument(arg)
if err != nil {
return RPCCall{}, err
}
fieldArgsMessage.Fields[i] = field
}
call.Request.Fields = append(call.Request.Fields, RPCField{
Name: fieldArgsFieldName,
ProtoTypeName: DataTypeMessage,
Message: fieldArgsMessage,
})
}

return call, nil
}

Expand Down
Loading
Loading