pub mod cargo;
mod dependency;
mod error;
mod members;
use std::fmt::{self, Display};
use strum::{EnumIs, EnumTryAs};
pub use self::cargo::CargoManifest;
pub use self::dependency::{Dependencies, DependenciesMut, DependencyMut, DependencyRef};
pub use self::error::Error;
pub use self::members::Members;
use super::PackageKind;
#[derive(Clone, Debug, PartialEq, Eq, EnumIs, EnumTryAs)]
pub enum Manifest {
Cargo(CargoManifest),
}
impl Manifest {
pub fn new_cargo(name: impl Into<String>) -> Self {
Self::Cargo(CargoManifest::new_package(name))
}
pub fn package_kind(&self) -> PackageKind {
match self {
Self::Cargo(_) => PackageKind::Cargo,
}
}
pub fn members(&self) -> Result<Members, Error> {
match self {
Self::Cargo(cargo) => Ok(cargo.members()?),
}
}
pub fn from_bytes(kind: PackageKind, bytes: &[u8]) -> Result<Self, Error> {
match kind {
PackageKind::Cargo => Ok(Self::Cargo(CargoManifest::from_bytes(bytes)?)),
}
}
}
impl Manifest {
pub fn get_dependency(&self, name: impl AsRef<str>) -> Option<DependencyRef<'_>> {
match self {
Self::Cargo(cargo) => cargo.get_dependency(name).map(DependencyRef::Cargo),
}
}
pub fn get_dependency_mut(&mut self, name: impl AsRef<str>) -> Option<DependencyMut<'_>> {
match self {
Self::Cargo(cargo) => cargo.get_dependency_mut(name).map(DependencyMut::Cargo),
}
}
pub fn dependencies(&self) -> Dependencies<'_> {
match self {
Self::Cargo(cargo) => Dependencies::Cargo(cargo.dependencies()),
}
}
pub fn dependencies_mut(&mut self) -> DependenciesMut<'_> {
match self {
Self::Cargo(cargo) => DependenciesMut::Cargo(cargo.dependencies_mut()),
}
}
}
impl Manifest {
pub fn get_dev_dependency(&self, name: impl AsRef<str>) -> Option<DependencyRef<'_>> {
match self {
Self::Cargo(cargo) => cargo.get_dev_dependency(name).map(DependencyRef::Cargo),
}
}
pub fn get_dev_dependency_mut(&mut self, name: impl AsRef<str>) -> Option<DependencyMut<'_>> {
match self {
Self::Cargo(cargo) => cargo.get_dev_dependency_mut(name).map(DependencyMut::Cargo),
}
}
pub fn dev_dependencies(&self) -> Dependencies<'_> {
match self {
Self::Cargo(cargo) => Dependencies::Cargo(cargo.dev_dependencies()),
}
}
pub fn dev_dependencies_mut(&mut self) -> DependenciesMut<'_> {
match self {
Self::Cargo(cargo) => DependenciesMut::Cargo(cargo.dev_dependencies_mut()),
}
}
}
impl Manifest {
pub fn get_build_dependency(&self, name: impl AsRef<str>) -> Option<DependencyRef<'_>> {
match self {
Self::Cargo(cargo) => cargo.get_build_dependency(name).map(DependencyRef::Cargo),
}
}
pub fn get_build_dependency_mut(&mut self, name: impl AsRef<str>) -> Option<DependencyMut<'_>> {
match self {
Self::Cargo(cargo) => cargo
.get_build_dependency_mut(name)
.map(DependencyMut::Cargo),
}
}
pub fn build_dependencies(&self) -> Dependencies<'_> {
match self {
Self::Cargo(cargo) => Dependencies::Cargo(cargo.build_dependencies()),
}
}
pub fn build_dependencies_mut(&mut self) -> DependenciesMut<'_> {
match self {
Self::Cargo(cargo) => DependenciesMut::Cargo(cargo.build_dependencies_mut()),
}
}
}
impl Display for Manifest {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Cargo(cargo) => Display::fmt(cargo, f),
}
}
}