Is there a way to do [dependencies.x] = { version = "y" }
and [dependencies.x] = "y"
in serde
+ toml
?
Got unreachable with this:
use serde::{Serialize, Deserialize};
fn main() {
let block = serde_json::from_str::<Block>("\"foo\"");
let Ok(Block::Str(val)) = block else {
unreachable!();
};
println!("{}", val);
}
#[derive(Debug, Serialize, Deserialize)]
enum Block {
List(Vec<String>),
Str(String),
}
jofas
2
Do you mean like this?
use serde::Deserialize;
#[derive(Deserialize, Debug, PartialEq)]
struct Config {
dependencies: Dependencies,
}
#[derive(Deserialize, Debug, PartialEq)]
struct Dependencies {
x: StringOrX,
}
#[derive(Deserialize, Debug, PartialEq)]
#[serde(untagged)]
enum StringOrX {
String(String),
X(X),
}
#[derive(Deserialize, Debug, PartialEq)]
struct X {
version: String,
}
fn main() {
let toml1 = r#"
[dependencies.x]
version = "v"
"#;
let c: Config = toml::from_str(toml1).unwrap();
assert_eq!(
c,
Config {
dependencies: Dependencies {
x: StringOrX::X(X {
version: "v".to_owned()
})
}
}
);
let toml1 = r#"
[dependencies]
x = "v"
"#;
let c: Config = toml::from_str(toml1).unwrap();
assert_eq!(
c,
Config {
dependencies: Dependencies {
x: StringOrX::String("v".to_owned())
}
}
);
}
Playground.
1 Like
system
Closed
4
This topic was automatically closed 90 days after the last reply. We invite you to open a new topic if you have further questions or comments.