diff options
Diffstat (limited to 'src/repo/ebuild/mod.rs')
| -rw-r--r-- | src/repo/ebuild/mod.rs | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/src/repo/ebuild/mod.rs b/src/repo/ebuild/mod.rs new file mode 100644 index 0000000..3f52db9 --- /dev/null +++ b/src/repo/ebuild/mod.rs @@ -0,0 +1,83 @@ +use get::Get; +use std::path::PathBuf; + +use crate::{ + atom::{Atom, Name, Slot, Version}, + 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>>, +} |
