Use String deserialization for bigInt
Doozers opened this issue · 1 comments
Doozers commented
Hi,
graphql use string type to represent big integers but the rusts bigint's types deserialise expecting a tuple (sign, value) so I'm having issues to deal with big integers.
use num_bigint::BigInt;
use serde::Deserialize;
#[derive(Debug, Deserialize)]
struct Data {
num: BigInt,
}
fn main() {
let data = r#"
{
"num": "111111111111111111111111111111111111",
}
"#;
let d: Data = serde_json::from_str(data).unwrap();
println!("{}", d.num);
}thread 'main' panicked at src/main.rs:16:46:
called `Result::unwrap()` on an `Err` value: Error("invalid type: string \"111111111111111111111111111111111111\", expected a tuple of size 2", line: 3, column: 57)code example to explain the problem, but the real-case error message is:
Error: reqwest::Error { kind: Decode, source: Error("invalid type: string \"29686942926033387970\", expected a tuple of size 2", line: 1, column: 177) }what is the best way to bypass these issues ?
tomhoule commented
Hi! I assume a wrapper with a custom deserialize would work fine. Something like:
struct GraphQlBigint(BigInt);
impl serde::Deserialize for GraphQlBigInt {
// ...
}