impl atom parsing

This commit is contained in:
John Turner
2025-10-23 00:52:35 -04:00
parent 6e4b45027e
commit 2e7d8cfbb9
5 changed files with 358 additions and 0 deletions

106
src/atom/mod.rs Normal file
View File

@@ -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>,
}