graphql-rust / graphql-client

Typed, correct GraphQL requests and responses in Rust
Apache License 2.0
1.12k stars 152 forks source link

Input `serde_json::Value` variable wrongly coerced to `String` #488

Open vindard opened 4 weeks ago

vindard commented 4 weeks ago

Description

I have a schema where some of the input types are JSON which expects json blobs. I've mapped this in the file where I'm deriving things using type JSON = serde_json::Value;.

In the actual code, the Variables type that got generated looks like this

pub struct Variables {
    pub transaction_id: Uuid,
    pub amount: Decimal,
    pub external_id: String,
    pub metadata: serde_json::Value,
}

But if I print the metadata field from a Variables instance I get a stringified version of the json value which errors when sent to the api.

Is there a setting I'm missing that can override this conversion?

#[derive(GraphQLQuery)]
#[graphql(
    schema_path = "src/ledger/cala/graphql/schema.graphql",
    query_path = "src/ledger/cala/graphql/transactions/add-equity.gql",
    response_derives = "Debug, PartialEq, Eq, Clone"
)]
pub struct PostAddEquityTransaction;
tomhoule commented 4 weeks ago

I don't think there is a missing setting, and I don't think there is any specific #[serde] annotation we put on these input values, so it looks like either the serde_json::Value you send is a Value::String with the already-serialized JSON in it, or there is a bug. I am not able to spend time on this project at this time though.