| Crates.io | variants_de |
| lib.rs | variants_de |
| version | 0.1.2 |
| created_at | 2025-07-28 20:00:34.071626+00 |
| updated_at | 2025-07-30 19:51:45.839481+00 |
| description | A native Rust decoder of TOML-formatted like files/streams. Provides implementations of deserializing TOML-formatted like files/streams to Rust structures with variant context. |
| homepage | https://github.com/gu-wei-x/variants |
| repository | https://github.com/gu-wei-x/variants |
| max_upload_size | |
| id | 1771515 |
| size | 95,644 |
variants_de is a crate to deserialize Rust data from TOML-formatted like files/streams based on variant context.
use std::error::Error;
use variants_de::default::Defaultvariants;
use variants_de::serde::Deserialize;
#[derive(Debug, Deserialize, PartialEq)]
#[serde(crate = "variants_de::serde")]
struct Config {
key1: String,
key2: u64,
}
fn main() -> Result<(), Box<dyn Error>> {
from_str()?;
from_file()?;
Ok(())
}
fn from_str() -> Result<(), Box<dyn Error>> {
let raw_str = r#"
key1&variant1:v1 = "v1"
key1 = "v2"
key2&variant2:v2 = "5"
key2 = "3"
"#;
let mut variants = Defaultvariants::default();
_ = variants.add("variant1", "v1");
_ = variants.add("variant2", "v2");
let result = variants_de::de::from_str_with_variants::<Config, _>(raw_str, &variants);
println!("{:?}", result); // Ok(Config { key1: "v1", key2: 5 })
assert_eq!(
result,
Ok(Config {
key1: "v1".to_string(),
key2: 5
})
);
Ok(())
}
fn from_file() -> Result<(), Box<dyn Error>> {
let mut variants = Defaultvariants::default();
_ = variants.add("variant1", "v1");
_ = variants.add("variant2", "v2");
let result = variants_de::de::from_file_with_variants::<Config, _, _>("basic.toml", &variants);
println!("{:?}", result); // Ok(Config { key1: "v1", key2: 5 })
assert_eq!(
result,
Ok(Config {
key1: "v1".to_string(),
key2: 5
})
);
Ok(())
}