diff options
Diffstat (limited to 'crates/repo/src/ebuild/mod.rs')
| -rw-r--r-- | crates/repo/src/ebuild/mod.rs | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/crates/repo/src/ebuild/mod.rs b/crates/repo/src/ebuild/mod.rs new file mode 100644 index 0000000..6c547c5 --- /dev/null +++ b/crates/repo/src/ebuild/mod.rs @@ -0,0 +1,83 @@ +use get::Get; + +use std::path::PathBuf; + +use atom::{Atom, Name, Slot, Version}; + +use useflag::{IUseFlag, UseFlag}; + +mod parsers; + +#[derive(Clone, Debug)] +pub enum Conditional { + Negative(UseFlag), + Positive(UseFlag), +} + +#[derive(Clone, Debug)] +pub enum Depend<T> { + Element(T), + AllOf(Vec<Self>), + AnyOf(Vec<Self>), + OneOf(Vec<Self>), + ConditionalGroup(Conditional, Vec<Self>), +} + +#[derive(Debug, Clone)] +pub enum UriPrefix { + Mirror, + Fetch, +} + +#[derive(Debug, Clone, Get)] +pub struct Uri { + #[get(kind = "deref")] + protocol: String, + #[get(kind = "deref")] + path: String, +} + +#[derive(Debug, Clone)] +pub enum SrcUri { + Filename(PathBuf), + Uri { + prefix: Option<UriPrefix>, + uri: Uri, + filename: Option<PathBuf>, + }, +} + +#[derive(Debug, Clone, Get)] +pub struct License(#[get(method = "get", kind = "deref")] String); + +#[derive(Debug, Clone, Get)] +pub struct Eapi(#[get(method = "get", kind = "deref")] String); + +#[derive(Debug, Clone, Get)] +pub struct Eclass(#[get(method = "get", kind = "deref")] String); + +#[derive(Debug, Clone, Get)] +pub struct Ebuild { + pub(super) name: Name, + pub(super) version: Version, + pub(super) slot: Option<Slot>, + pub(super) homepage: Option<String>, + #[get(kind = "deref")] + pub(super) src_uri: Vec<Depend<SrcUri>>, + pub(super) eapi: Option<Eapi>, + #[get(kind = "deref")] + pub(super) inherit: Vec<Eclass>, + #[get(kind = "deref")] + pub(super) iuse: Vec<IUseFlag>, + #[get(kind = "deref")] + pub(super) license: Vec<Depend<License>>, + pub(super) description: Option<String>, + #[get(kind = "deref")] + pub(super) depend: Vec<Depend<Atom>>, + #[get(kind = "deref")] + pub(super) bdepend: Vec<Depend<Atom>>, + #[get(kind = "deref")] + pub(super) rdepend: Vec<Depend<Atom>>, + #[get(kind = "deref")] + pub(super) idepend: Vec<Depend<Atom>>, +} |
