По enum representation не догнал, уже по всякому пробовал
Вероятно, повесить аттрибут flatten на поле с енумом — то что нужно
Не понимает он 🙁 ``` #[derive(Deserialize, Debug)] enum FooEnum { #[serde(rename = "one")] One, #[serde(rename = "two")] Two } #[derive(Deserialize, Debug)] struct Foo { #[serde(flatten)] f: FooEnum } fn main() { println!("{:?}", serde_json::from_str::<Foo>( r#" { "f": "one" } "# )); } ```
"f" в jsone не нужен в таком случае
#[derive(Deserialize, Debug)] enum FooEnum { #[serde(rename = "one")] One, #[serde(rename = "two")] Two } #[derive(Deserialize, Debug)] struct Foo { f: FooEnum }
Спасибо, я тупанул, даже этот вариант не проверил
use serde::*; #[derive(Deserialize, Debug)] #[serde(tag = "f")] enum FooEnum { #[serde(rename = "one")] One {test:u8}, #[serde(rename = "two")] Two } #[derive(Deserialize, Debug)] struct Foo { #[serde(flatten)] f: FooEnum } fn main() { println!("{:?}", serde_json::from_str::<Foo>( r#" { "f": "one", "test": 123 } "# )); } Мне кажется тебе в итоге что-то такое нужно будет) https://serde.rs/enum-representations.html
Нет, именно то что имя тэга разное, а возможные значения одни и те же ``` #[derive(Deserialize, Debug)] struct Foo { f: FooEnum } #[derive(Deserialize, Debug)] struct Bar { b: FooEnum } ```
Тогда оке. Но по ссылке все равно на будущее глянь)
Спасибо! Эту ссылку глядел (глаза уже мозолит она 😂), много уже вопросов по serde задал здесь. Не дружу я с enum`ами
Обсуждают сегодня