summaryrefslogtreecommitdiff
path: root/src/atom/mod.rs
blob: 07ccd0f8270b8eefd710b4a01a465c58085c1f57 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
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: Option<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>,
}