use std::fmt::Display; use std::path::PathBuf; use serde::{Deserialize, Serialize}; #[derive(Debug, Clone, Deserialize, Serialize)] pub struct Meta { name: String, version: semver::Version, #[serde(skip_serializing_if = ">::is_none")] authors: Option>, #[serde(skip_serializing_if = ">::is_none")] repository: Option, #[serde(skip_serializing_if = ">::is_none")] license: Option, #[serde(skip_serializing_if = ">::is_none")] license_file: Option, } impl Meta { pub fn new(name: S) -> Self { let mut meta = Self::default(); meta.name = name.to_string(); meta } pub fn name(&self) -> String { self.name.clone() } } impl Default for Meta { fn default() -> Self { Self { name: Default::default(), version: semver::Version::new(0, 1, 0), authors: None, repository: None, license: None, license_file: None, } } } #[derive(Debug, Clone, Copy, Deserialize, Serialize)] pub enum License { Mit, Apache, } impl Display for License { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!( f, "{}", match self { License::Mit => "MIT", License::Apache => "Apache", } ) } }