toml icon indicating copy to clipboard operation
toml copied to clipboard

Error when serializing vector of enums

Open vikigenius opened this issue 2 years ago • 1 comments

This is probably carried over from toml-rs, but reproducing anyway.

use serde::{Deserialize, Serialize};

#[derive(Debug, Deserialize, Serialize)]
pub struct Module1 {
    x: u8,
    y: u8
}

#[derive(Debug, Deserialize, Serialize)]
pub struct Module2 {
    h: u8,
    i: u8
}

#[derive(Debug, Deserialize, Serialize)]
pub enum Module {
    Module1(Module1),
    Module2(Module2)
}

#[derive(Debug, Deserialize, Serialize)]
pub struct Container {
    modules: Vec<Module>,
}


#[cfg(test)]
mod tests {
    use super::*;
    use serde_json;
    use toml;

    #[test]
    fn test_container_serialization() {
        let module1 = Module1 {x: 4, y: 5};
        let module2 = Module2 {h: 2, i: 3};
        let container: Container = Container {modules: vec![Module::Module1(module1), Module::Module2(module2)]};
        dbg!(serde_json::to_string(&container).unwrap()); // This works
        dbg!(toml_edit::easy::to_string(&container).unwrap()); // This panics
        dbg!(toml::to_string(&container).unwrap()); // This also panics
    }
}

vikigenius avatar Jul 05 '22 03:07 vikigenius

Structured more like a test we'd add:


#[test]
fn test_container_serialization() {
    #[derive(Debug, Deserialize, Serialize)]
    pub struct Module1 {
        x: u8,
        y: u8,
    }

    #[derive(Debug, Deserialize, Serialize)]
    pub struct Module2 {
        h: u8,
        i: u8,
    }

    #[derive(Debug, Deserialize, Serialize)]
    pub enum Module {
        Module1(Module1),
        Module2(Module2),
    }

    #[derive(Debug, Deserialize, Serialize)]
    pub struct Container {
        modules: Vec<Module>,
    }

    let module1 = Module1 { x: 4, y: 5 };
    let module2 = Module2 { h: 2, i: 3 };
    let container: Container = Container {
        modules: vec![Module::Module1(module1), Module::Module2(module2)],
    };
    toml::to_string(&container).unwrap();
}

epage avatar Jan 18 '23 17:01 epage