use std::collections::BTreeMap;
use serde::Deserialize;
#[derive(Debug, Deserialize)]
pub struct Manifest {
pub(crate) package: Package,
#[serde(default)]
pub(crate) features: BTreeMap<String, Vec<String>>,
#[serde(default)]
pub(crate) workspace: Option<Workspace>
}
#[derive(Debug, Deserialize)]
pub struct Package {
pub(crate) version: String,
#[serde(rename = "rust-version")]
pub(crate) rust_version: Option<RustVersion>,
#[serde(default)]
pub(crate) metadata: Option<PackageMetadata>
}
#[derive(Debug, Deserialize)]
#[serde(untagged)]
pub enum RustVersion {
Value(String),
Inherited { workspace: bool }
}
#[derive(Debug, Deserialize)]
pub struct Workspace {
#[serde(default)]
pub(crate) package: Option<WorkspacePackage>
}
#[derive(Debug, Deserialize)]
pub struct WorkspacePackage {
#[serde(rename = "rust-version")]
pub(crate) rust_version: Option<String>
}
#[derive(Debug, Deserialize)]
pub struct PackageMetadata {
#[serde(default)]
pub(crate) masterror: Option<MasterrorMetadata>
}
#[derive(Debug, Deserialize)]
pub struct MasterrorMetadata {
#[serde(default)]
pub(crate) readme: Option<ReadmeMetadata>
}
#[derive(Clone, Debug, Deserialize)]
pub struct ReadmeMetadata {
#[serde(default)]
pub(crate) feature_order: Vec<String>,
#[serde(default)]
pub(crate) feature_snippet_group: Option<usize>,
#[serde(default)]
pub(crate) conversion_lines: Vec<String>,
#[serde(default)]
pub(crate) features: BTreeMap<String, FeatureMetadata>
}
#[derive(Clone, Debug, Deserialize)]
pub struct FeatureMetadata {
pub(crate) description: String,
#[serde(default)]
pub(crate) extra: Vec<String>
}
#[derive(Clone, Debug)]
pub struct FeatureDoc {
pub(crate) name: String,
pub(crate) description: String,
pub(crate) extra: Vec<String>
}