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