use std::fs::read_to_string; use std::path::PathBuf; use serde_derive::{Serialize, Deserialize}; #[derive(Debug, Eq, PartialEq)] pub struct Entity { pub name: String, pub image: String, pub tags: Vec, } impl Entity { pub fn from_file(path: PathBuf) -> Self { let name = path.file_stem().unwrap().to_str().unwrap().into(); let intermediate: IntermediateEntity = toml::from_str( &read_to_string(path).unwrap() ).unwrap(); Self { name, image: intermediate.image, tags: intermediate.tags } } } #[derive(Debug, Serialize, Deserialize)] pub(crate) struct IntermediateEntity { image: String, tags: Vec, } #[cfg(test)] mod test { use std::path::PathBuf; use crate::entity::Entity; #[test] fn from_file() { let path = PathBuf::from("src/test-resources/basic/entities/avatar.toml"); let output = Entity::from_file(path); let expected = Entity { name: "avatar".into(), image: "avatar".into(), tags: vec![] }; assert_eq!(output, expected); } }