pub mod cargo;
mod error;
use std::fmt::{self, Display};
use semver::Version;
use strum::{EnumIs, EnumTryAs};
use crate::package::PackageKind;
pub use self::cargo::CargoLockfile;
pub use self::error::Error;
#[derive(Clone, Debug, PartialEq, Eq, EnumIs, EnumTryAs)]
pub enum Lockfile {
Cargo(CargoLockfile),
}
impl Lockfile {
pub fn kind(&self) -> PackageKind {
match self {
Self::Cargo(_) => PackageKind::Cargo,
}
}
pub fn set_package_version(&mut self, package: impl AsRef<str>, version: impl Into<Version>) {
match self {
Self::Cargo(cargo) => cargo.set_package_version(package, version),
}
}
}
impl Lockfile {
pub(crate) fn from_bytes(kind: PackageKind, bytes: &[u8]) -> Result<Self, Error> {
match kind {
PackageKind::Cargo => Ok(Self::Cargo(CargoLockfile::from_bytes(bytes)?)),
}
}
}
impl Display for Lockfile {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Cargo(cargo) => Display::fmt(cargo, f),
}
}
}