blob: 845de9fb06164d0f00ca2078ce48e9b47e9fc234 [file] [log] [blame]
use super::Options;
use toml::value::{Table, Value};
mod elaborate_workspace;
mod pkg_status;
mod temp_project;
pub use self::elaborate_workspace::ElaborateWorkspace;
pub use self::pkg_status::*;
pub use self::temp_project::TempProject;
/// A continent struct for quick parsing and manipulating manifest
#[derive(Debug, serde_derive::Serialize, serde_derive::Deserialize)]
struct Manifest {
#[serde(serialize_with = "::toml::ser::tables_last")]
pub package: Table,
#[serde(
skip_serializing_if = "Option::is_none",
serialize_with = "opt_tables_last"
)]
pub dependencies: Option<Table>,
#[serde(
rename = "dev-dependencies",
skip_serializing_if = "Option::is_none",
serialize_with = "opt_tables_last"
)]
pub dev_dependencies: Option<Table>,
#[serde(
rename = "build-dependencies",
skip_serializing_if = "Option::is_none",
serialize_with = "opt_tables_last"
)]
pub build_dependencies: Option<Table>,
pub lib: Option<Table>,
pub bin: Option<Vec<Table>>,
#[serde(
skip_serializing_if = "Option::is_none",
serialize_with = "opt_tables_last"
)]
pub workspace: Option<Table>,
#[serde(
skip_serializing_if = "Option::is_none",
serialize_with = "opt_tables_last"
)]
pub target: Option<Table>,
pub features: Option<Value>,
}
impl Manifest {
pub fn name(&self) -> String {
match self.package["name"] {
Value::String(ref name) => name.clone(),
_ => unreachable!(),
}
}
}
pub fn opt_tables_last<S>(data: &Option<Table>, serializer: S) -> Result<S::Ok, S::Error>
where
S: ::serde::ser::Serializer,
{
match *data {
Some(ref d) => ::toml::ser::tables_last(d, serializer),
None => unreachable!(),
}
}