From a4815d55a56d3c842f22dd3648033f58943769c7 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Tue, 13 Oct 2020 19:57:37 +0200 Subject: Split files for more structure Signed-off-by: Matthias Beyer --- src/package/dependency.rs | 29 ++++++++++ src/package/mod.rs | 19 +++++-- src/package/name.rs | 25 +++++++++ src/package/package.rs | 35 ++---------- src/package/source.rs | 37 +++++++++++++ src/package/util.rs | 132 ---------------------------------------------- src/package/version.rs | 74 ++++++++++++++++++++++++++ 7 files changed, 184 insertions(+), 167 deletions(-) create mode 100644 src/package/dependency.rs create mode 100644 src/package/name.rs create mode 100644 src/package/source.rs create mode 100644 src/package/version.rs diff --git a/src/package/dependency.rs b/src/package/dependency.rs new file mode 100644 index 0000000..da3ac3a --- /dev/null +++ b/src/package/dependency.rs @@ -0,0 +1,29 @@ +use std::result::Result as RResult; +use serde::Deserialize; + +use crate::package::PackageName; +use crate::package::PackageVersionConstraint; + + +#[derive(Deserialize, Clone, Debug, Hash, Eq, PartialEq, Ord, PartialOrd)] +#[serde(transparent)] +pub struct SystemDependency(String); + +#[derive(Deserialize, Clone, Debug, Hash, Eq, PartialEq, Ord, PartialOrd)] +#[serde(transparent)] +pub struct BuildDependency(String); + +#[derive(Deserialize, Clone, Debug, Hash, Eq, PartialEq, Ord, PartialOrd)] +#[serde(transparent)] +pub struct Dependency(String); + +impl std::convert::TryInto<(PackageName, PackageVersionConstraint)> for Dependency { + type Error = anyhow::Error; + + fn try_into(self) -> RResult<(PackageName, PackageVersionConstraint), Self::Error> { + // TODO: Implement properly + let v: Vec<_> = self.0.split("-").collect(); + Ok((PackageName::from(String::from(v[0])), PackageVersionConstraint::Any)) + } +} + diff --git a/src/package/mod.rs b/src/package/mod.rs index d2ef5f1..371a556 100644 --- a/src/package/mod.rs +++ b/src/package/mod.rs @@ -1,9 +1,20 @@ -mod package; +//! Module that contains all types and functionality that has to do with a package. + +mod dependency; +pub use dependency::*; + +mod name; +pub use name::*; + +mod package; pub use package::*; -mod util; -pub use util::*; +mod source; +pub use source::*; -mod tree; +mod tree; pub use tree::*; +mod version; +pub use version::*; + diff --git a/src/package/name.rs b/src/package/name.rs new file mode 100644 index 0000000..f42c827 --- /dev/null +++ b/src/package/name.rs @@ -0,0 +1,25 @@ +use std::ops::Deref; +use serde::Deserialize; + +#[derive(Deserialize, Clone, Debug, Hash, Eq, PartialEq, Ord, PartialOrd)] +#[serde(transparent)] +pub struct PackageName(String); + +impl Deref for PackageName { + type Target = String; + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +impl From for PackageName { + fn from(s: String) -> Self { + PackageName(s) + } +} + +impl std::fmt::Display for PackageName { + fn fmt(&self, f: &mut std::fmt::Formatter) -> Result<(), std::fmt::Error> { + self.0.fmt(f) + } +} diff --git a/src/package/package.rs b/src/package/package.rs index 230211b..af4c4e3 100644 --- a/src/package/package.rs +++ b/src/package/package.rs @@ -1,7 +1,6 @@ use std::path::PathBuf; use std::collections::HashMap; -use url::Url; use getset::Getters; use serde::Deserialize; use anyhow::Result; @@ -9,7 +8,10 @@ use anyhow::Error; use resiter::AndThen; use crate::phase::{PhaseName, Phase}; -use crate::package::util::*; +use crate::package::dependency::*; +use crate::package::source::*; +use crate::package::name::*; +use crate::package::version::*; use crate::util::docker::ImageName; use crate::util::executor::Executor; @@ -100,35 +102,6 @@ impl Eq for Package { } -#[derive(Clone, Debug, Deserialize, Getters)] -pub struct Source { - #[getset(get = "pub")] - url: Url, - #[getset(get = "pub")] - hash: SourceHash, -} - -#[derive(Clone, Debug, Deserialize)] -pub struct SourceHash { - #[serde(rename = "type")] - hashtype: HashType, - - #[serde(rename = "hash")] - value: HashValue, -} - -#[derive(Clone, Debug, Deserialize)] -pub enum HashType { - #[serde(rename = "sha1")] - Sha1, - - #[serde(rename = "sha256")] - Sha256, - - #[serde(rename = "sha512")] - Sha512, -} - #[derive(Clone, Debug, Deserialize)] pub struct PackageFlags { build_parallel: bool, diff --git a/src/package/source.rs b/src/package/source.rs new file mode 100644 index 0000000..8d69835 --- /dev/null +++ b/src/package/source.rs @@ -0,0 +1,37 @@ +use url::Url; +use serde::Deserialize; +use getset::Getters; + +#[derive(Clone, Debug, Deserialize, Getters)] +pub struct Source { + #[getset(get = "pub")] + url: Url, + #[getset(get = "pub")] + hash: SourceHash, +} + +#[derive(Clone, Debug, Deserialize)] +pub struct SourceHash { + #[serde(rename = "type")] + hashtype: HashType, + + #[serde(rename = "hash")] + value: HashValue, +} + +#[derive(Clone, Debug, Deserialize)] +pub enum HashType { + #[serde(rename = "sha1")] + Sha1, + + #[serde(rename = "sha256")] + Sha256, + + #[serde(rename = "sha512")] + Sha512, +} + +#[derive(Deserialize, Clone, Debug, Hash, Eq, PartialEq)] +#[serde(transparent)] +pub struct HashValue(String); + diff --git a/src/package/util.rs b/src/package/util.rs index c8a2975..e69de29 100644 --- a/src/package/util.rs +++ b/src/package/util.rs @@ -1,132 +0,0 @@ -//! Utility types for the package definitions -//! -//! These types exist only for the purpose of strong typing -//! and cannot do anything special. - -use std::result::Result as RResult; -use std::ops::Deref; - -use serde::Deserialize; -use anyhow::Result; - -#[derive(Deserialize, Clone, Debug, Hash, Eq, PartialEq, Ord, PartialOrd)] -#[serde(transparent)] -pub struct PackageName(String); - -impl Deref for PackageName { - type Target = String; - fn deref(&self) -> &Self::Target { - &self.0 - } -} - -impl From for PackageName { - fn from(s: String) -> Self { - PackageName(s) - } -} - -impl std::fmt::Display for PackageName { - fn fmt(&self, f: &mut std::fmt::Formatter) -> Result<(), std::fmt::Error> { - self.0.fmt(f) - } -} - -#[derive(Deserialize, Clone, Debug, Hash, Eq, PartialEq, Ord, PartialOrd)] -#[serde(transparent)] -pub struct PackageVersion(String); - -impl From for PackageVersion { - fn from(s: String) -> Self { - PackageVersion(s) - } -} - -#[derive(Deserialize, Clone, Debug, Hash, Eq, PartialEq, Ord, PartialOrd)] -#[serde(transparent)] -pub struct SystemDependency(String); - -#[derive(Deserialize, Clone, Debug, Hash, Eq, PartialEq, Ord, PartialOrd)] -#[serde(transparent)] -pub struct BuildDependency(String); - -#[derive(Deserialize, Clone, Debug, Hash, Eq, PartialEq, Ord, PartialOrd)] -#[serde(transparent)] -pub struct Dependency(String); - -impl std::convert::TryInto<(PackageName, PackageVersionConstraint)> for Dependency { - type Error = anyhow::Error; - - fn try_into(self) -> RResult<(PackageName, PackageVersionConstraint), Self::Error> { - // TODO: Implement properly - let v: Vec<_> = self.0.split("-").collect(); - Ok((PackageName::from(String::from(v[0])), PackageVersionConstraint::Any)) - } -} - -#[derive(Deserialize, Clone, Debug, Hash, Eq, PartialEq)] -#[serde(transparent)] -pub struct HashValue(String); - - -/// A type which can be used to express a package version constraint -// TODO: Remove allow(unused) -#[derive(Debug, Eq, PartialEq)] -#[allow(unused)] -pub enum PackageVersionConstraint { - Any, - Latest, - LowerAs(PackageVersion), - HigherAs(PackageVersion), - InRange(PackageVersion, PackageVersion), - Exact(PackageVersion), -} - -impl PackageVersionConstraint { - pub fn matches(&self, v: &PackageVersion) -> Result { - match self { - PackageVersionConstraint::Any => Ok(PackageVersionMatch::True), - PackageVersionConstraint::Latest => Ok(PackageVersionMatch::Undecided), - PackageVersionConstraint::LowerAs(_vers) => Ok(PackageVersionMatch::Undecided), // TODO: Fix implementation - PackageVersionConstraint::HigherAs(_vers) => Ok(PackageVersionMatch::Undecided), // TODO: Fix implementation - PackageVersionConstraint::InRange(_vers1, _vers2) => Ok(PackageVersionMatch::Undecided), // TODO: Fix implementation - PackageVersionConstraint::Exact(vers) => Ok(PackageVersionMatch::from(*v == *vers)), - } - } -} - -#[derive(Debug, Clone, Copy, Eq, PartialEq)] -pub enum PackageVersionMatch { - True, - False, - Undecided, -} - -impl PackageVersionMatch { - // TODO: Remove allow(unused) - #[allow(unused)] - pub fn is_true(&self) -> bool { - *self == PackageVersionMatch::True - } - - pub fn is_false(&self) -> bool { - *self == PackageVersionMatch::False - } - - // TODO: Remove allow(unused) - #[allow(unused)] - pub fn is_undecided(&self) -> bool { - *self == PackageVersionMatch::Undecided - } -} - -impl From for PackageVersionMatch { - fn from(b: bool) -> Self { - if b { - PackageVersionMatch::True - } else { - PackageVersionMatch::False - } - } -} - diff --git a/src/package/version.rs b/src/package/version.rs new file mode 100644 index 0000000..d6c385d --- /dev/null +++ b/src/package/version.rs @@ -0,0 +1,74 @@ +use serde::Deserialize; +use anyhow::Result; + +#[derive(Deserialize, Clone, Debug, Hash, Eq, PartialEq, Ord, PartialOrd)] +#[serde(transparent)] +pub struct PackageVersion(String); + +impl From for PackageVersion { + fn from(s: String) -> Self { + PackageVersion(s) + } +} + +/// A type which can be used to express a package version constraint +// TODO: Remove allow(unused) +#[derive(Debug, Eq, PartialEq)] +#[allow(unused)] +pub enum PackageVersionConstraint { + Any, + Latest, + LowerAs(PackageVersion), + HigherAs(PackageVersion), + InRange(PackageVersion, PackageVersion), + Exact(PackageVersion), +} + +impl PackageVersionConstraint { + pub fn matches(&self, v: &PackageVersion) -> Result { + match self { + PackageVersionConstraint::Any => Ok(PackageVersionMatch::True), + PackageVersionConstraint::Latest => Ok(PackageVersionMatch::Undecided), + PackageVersionConstraint::LowerAs(_vers) => Ok(PackageVersionMatch::Undecided), // TODO: Fix implementation + PackageVersionConstraint::HigherAs(_vers) => Ok(PackageVersionMatch::Undecided), // TODO: Fix implementation + PackageVersionConstraint::InRange(_vers1, _vers2) => Ok(PackageVersionMatch::Undecided), // TODO: Fix implementation + PackageVersionConstraint::Exact(vers) => Ok(PackageVersionMatch::from(*v == *vers)), + } + } +} + +#[derive(Debug, Clone, Copy, Eq, PartialEq)] +pub enum PackageVersionMatch { + True, + False, + Undecided, +} + +impl PackageVersionMatch { + // TODO: Remove allow(unused) + #[allow(unused)] + pub fn is_true(&self) -> bool { + *self == PackageVersionMatch::True + } + + pub fn is_false(&self) -> bool { + *self == PackageVersionMatch::False + } + + // TODO: Remove allow(unused) + #[allow(unused)] + pub fn is_undecided(&self) -> bool { + *self == PackageVersionMatch::Undecided + } +} + +impl From for PackageVersionMatch { + fn from(b: bool) -> Self { + if b { + PackageVersionMatch::True + } else { + PackageVersionMatch::False + } + } +} + -- cgit v1.2.3