| Crates.io | serde-tuplex |
| lib.rs | serde-tuplex |
| version | 0.1.1 |
| created_at | 2025-11-09 13:00:04.883172+00 |
| updated_at | 2025-11-09 13:11:00.964815+00 |
| description | Tuple serialization and lenient numeric parsing for serde |
| homepage | |
| repository | https://github.com/Arasple/serde-tuplex |
| max_upload_size | |
| id | 1924111 |
| size | 54,423 |
tuple serialization and lenient numeric parsing for serde
123 or "123")[1, 2] instead of {"a": 1, "b": 2})#[derive(Lenient)]#[serde_tuplex(skip)] or lenient helpercargo add serde-tuplex serde --features serde/derive
Or manually in Cargo.toml:
[dependencies]
serde-tuplex = "0.1"
serde = { version = "1.0", features = ["derive"] }
use serde_tuplex::Lenient;
#[derive(Lenient)]
struct User {
id: u64, // accepts 100 or "100"
balance: f64, // accepts 99.99 or "99.99"
age: Option<u32>, // accepts numbers, strings, null, or missing
name: String, // unchanged
}
use serde_tuplex::TupleLenient;
#[derive(TupleLenient)]
struct Measurement {
timestamp: u64,
value: f64,
}
// Accepts: [1234567890, 23.5] or ["1234567890", "23.5"]
// Serializes to: [1234567890, 23.5]
use serde_tuplex::Tuple;
#[derive(Tuple)]
struct Point {
x: u64,
y: u64,
}
// Serializes to: [10, 20]
use serde::Deserialize;
#[derive(Deserialize)]
struct Data {
#[serde(deserialize_with = "serde_tuplex::lenient")]
count: u64, // Lenient
strict: u32, // Strict
}
#[derive(Lenient)]
struct Config {
timeout: u64, // Auto: lenient
#[serde_tuplex(skip)]
port: u16, // Strict parsing only
}