use super::{Manifest, ManifestMetadata, PackageId};
use serde_derive::{Deserialize, Serialize};
#[derive(Debug, Deserialize, Serialize)]
#[serde(rename_all = "kebab-case")]
pub struct TomlManifest {
package: TomlProject,
}
#[derive(Deserialize, Serialize, Clone, Debug)]
pub struct TomlProject {
name: String,
version: semver::Version,
authors: Option<Vec<String>>,
}
impl TomlManifest {
pub fn into_real_manifest(self) -> Result<Manifest, anyhow::Error> {
let name = self.package.name.trim();
if name.is_empty() {
anyhow::bail!("package name cannot be an empty string");
}
Ok(Manifest {
package_id: PackageId {
name: name.to_owned(),
version: self.package.version,
},
metadata: ManifestMetadata {
authors: self.package.authors.unwrap_or_default(),
},
})
}
}