diff options
| author | John Turner <jturner.usa@gmail.com> | 2025-10-23 00:52:35 -0400 |
|---|---|---|
| committer | John Turner <jturner.usa@gmail.com> | 2025-10-23 21:19:47 -0400 |
| commit | 2e7d8cfbb92361b6c35f8f9a567c0517139cfb51 (patch) | |
| tree | e6ce91d8b138f597db408e18318bd768d3e92cc3 /src/atom/mod.rs | |
| parent | 6e4b45027e993f805346809f22d7a209bb477d2f (diff) | |
| download | gentoo-utils-2e7d8cfbb92361b6c35f8f9a567c0517139cfb51.tar.gz | |
impl atom parsing
Diffstat (limited to 'src/atom/mod.rs')
| -rw-r--r-- | src/atom/mod.rs | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/src/atom/mod.rs b/src/atom/mod.rs new file mode 100644 index 0000000..f5884bc --- /dev/null +++ b/src/atom/mod.rs @@ -0,0 +1,106 @@ +use core::option::Option; + +use crate::useflag::UseFlag; +use get::Get; + +pub mod parsers; + +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum Blocker { + Weak, + Strong, +} + +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum VersionOperator { + Lt, + Gt, + LtEq, + GtEq, + Roughly, +} + +#[derive(Clone, Debug, PartialEq, Eq, Get)] +pub struct Category(#[get(method = "get")] String); + +#[derive(Clone, Debug, PartialEq, Eq, Get)] +pub struct Name(#[get(method = "get")] String); + +#[derive(Clone, Debug, Get)] +pub struct VersionNumber(#[get(method = "get")] String); + +#[derive(Clone, Copy, Debug)] +pub enum VersionSuffixKind { + Alpha, + Beta, + Pre, + Rc, + P, +} + +#[derive(Clone, Debug, Get)] +pub struct VersionSuffix { + kind: VersionSuffixKind, + number: Option<VersionNumber>, +} + +#[derive(Clone, Debug, Get)] +pub struct Version { + numbers: Vec<VersionNumber>, + letter: Option<char>, + suffixes: Vec<VersionSuffix>, + rev: Option<VersionNumber>, +} + +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum SlotOperator { + Eq, + Star, +} + +#[derive(Clone, Debug, PartialEq, Eq, Get)] +pub struct SlotName(#[get(method = "name")] String); + +#[derive(Clone, Debug, PartialEq, Eq, Get)] +pub struct Slot { + slot: SlotName, + sub: Option<SlotName>, + operator: Option<SlotOperator>, +} + +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum UseDepNegate { + Minus, + Exclamation, +} + +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum UseDepSign { + Enabled, + Disabled, +} + +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum UseDepCondition { + Eq, + Question, +} + +#[derive(Clone, Debug, PartialEq, Eq, Get)] +pub struct UseDep { + negate: Option<UseDepNegate>, + flag: UseFlag, + sign: Option<UseDepSign>, + condition: Option<UseDepCondition>, +} + +#[derive(Clone, Debug, Get)] +pub struct Atom { + blocker: Option<Blocker>, + version_operator: Option<VersionOperator>, + category: Category, + name: Name, + version: Option<Version>, + slot: Option<Slot>, + usedeps: Vec<UseDep>, +} |
