summaryrefslogtreecommitdiff
path: root/src/atom/mod.rs
diff options
context:
space:
mode:
authorJohn Turner <jturner.usa@gmail.com>2025-10-23 00:52:35 -0400
committerJohn Turner <jturner.usa@gmail.com>2025-10-23 21:19:47 -0400
commit2e7d8cfbb92361b6c35f8f9a567c0517139cfb51 (patch)
treee6ce91d8b138f597db408e18318bd768d3e92cc3 /src/atom/mod.rs
parent6e4b45027e993f805346809f22d7a209bb477d2f (diff)
downloadgentoo-utils-2e7d8cfbb92361b6c35f8f9a567c0517139cfb51.tar.gz
impl atom parsing
Diffstat (limited to 'src/atom/mod.rs')
-rw-r--r--src/atom/mod.rs106
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>,
+}