| Crates.io | tktax-serde |
| lib.rs | tktax-serde |
| version | 0.2.2 |
| created_at | 2025-02-01 01:41:25.979815+00 |
| updated_at | 2025-02-01 01:41:25.979815+00 |
| description | Serde utilities for parsing check or serial number fields with optional u64 values |
| homepage | |
| repository | https://github.com/klebs6/tktax |
| max_upload_size | |
| id | 1537992 |
| size | 79,477 |
This crate provides custom Serde utilities focused on parsing check or serial numbers into an optional u64. An empty string is interpreted as None, while numeric strings and integral values are parsed as Some(u64).
u64, returning None if the field is empty.Add the following to your Cargo.toml:
[dependencies]
tktax-serde = "0.1.0"
serde = "1.0"
serde_json = "1.0"
Import and apply the custom deserializer:
use serde::Deserialize;
use tktax_serde::parse_check_or_serial_number_opt;
#[derive(Debug, Deserialize)]
struct MyStruct {
// This field will be deserialized via our custom parser
#[serde(deserialize_with = "parse_check_or_serial_number_opt")]
check_number: Option<u64>,
}
fn main() -> Result<(), serde_json::Error> {
let json_data_empty = r#"{"check_number": ""}"#;
let parsed_empty: MyStruct = serde_json::from_str(json_data_empty)?;
assert_eq!(parsed_empty.check_number, None);
let json_data_numeric = r#"{"check_number": "42"}"#;
let parsed_numeric: MyStruct = serde_json::from_str(json_data_numeric)?;
assert_eq!(parsed_numeric.check_number, Some(42));
let json_data_int = r#"{"check_number": 123}"#;
let parsed_int: MyStruct = serde_json::from_str(json_data_int)?;
assert_eq!(parsed_int.check_number, Some(123));
Ok(())
}
Run tests using:
cargo test --package tktax-serde
The comprehensive test suite verifies empty string handling, numeric string conversion, and numeric literal conversion, ensuring proper adherence to expected deserialization behavior.
Issues and pull requests are welcomed to improve functionality, fix bugs, or enhance documentation.
© 2025 tktax-serde contributors. Licensed under the Apache-2.0 License.