-
Notifications
You must be signed in to change notification settings - Fork 601
Open
Description
u128
won't parse inside of an untagged enum, whereas other unsigned variant does
#![allow(dead_code, unused_imports)]
use serde::Deserialize;
use serde_json;
fn main() {
println!("--- Case 1: u64 inside untagged enum ---");
test_order_resp_with_u64();
println!("\n--- Case 2: u128 inside untagged enum ---");
test_order_resp_with_u128();
println!("\n--- Case 3: u128 in plain struct (no enum) ---");
test_direct_u128_struct();
}
#[derive(Debug, Deserialize)]
#[serde(untagged)]
enum OrderRespU64 {
Resting { resting: RestingOrderU64 },
Error { error: String },
}
#[derive(Debug, Deserialize)]
#[serde(untagged)]
enum OrderRespU128 {
Resting { resting: RestingOrderU128 },
Error { error: String },
}
#[derive(Debug, Deserialize)]
struct RestingOrderU64 {
oid: u64,
}
#[derive(Debug, Deserialize)]
struct RestingOrderU128 {
oid: u128,
}
#[derive(Debug, Deserialize)]
struct WrapperU128Direct {
resting: RestingOrderU128,
}
fn test_order_resp_with_u64() {
let json = r#"{ "resting": { "oid": 77738308 } }"#;
let result: Result<OrderRespU64, _> = serde_json::from_str(json);
match result {
Ok(v) => println!("[SUCCESS] u64 parsed: {:?}", v),
Err(e) => eprintln!("[FAILURE] u64 parse failed: {}", e),
}
}
fn test_order_resp_with_u128() {
let json = r#"{ "resting": { "oid": 77738308 } }"#;
let result: Result<OrderRespU128, _> = serde_json::from_str(json);
match result {
Ok(v) => println!("[SUCCESS] u128 in untagged parsed: {:?}", v),
Err(e) => eprintln!("[FAILURE] u128 in untagged parse failed: {}", e),
}
}
fn test_direct_u128_struct() {
let json = r#"{ "resting": { "oid": 77738308 } }"#;
let result: Result<WrapperU128Direct, _> = serde_json::from_str(json);
match result {
Ok(v) => println!("[SUCCESS] direct u128 struct parsed: {:?}", v),
Err(e) => eprintln!("[FAILURE] direct u128 struct failed: {}", e),
}
}
mplanchard
Metadata
Metadata
Assignees
Labels
No labels