summaryrefslogtreecommitdiff
path: root/src/atom/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/atom/mod.rs')
-rw-r--r--src/atom/mod.rs46
1 files changed, 31 insertions, 15 deletions
diff --git a/src/atom/mod.rs b/src/atom/mod.rs
index 0378a8d..6251e35 100644
--- a/src/atom/mod.rs
+++ b/src/atom/mod.rs
@@ -79,11 +79,17 @@ pub enum SlotOperator {
#[derive(Clone, Debug, PartialEq, Eq, Get)]
pub struct SlotName(#[get(method = "name", kind = "deref")] String);
-#[derive(Clone, Debug, PartialEq, Eq, Get)]
-pub struct Slot {
- primary: Option<SlotName>,
- sub: Option<SlotName>,
- operator: Option<SlotOperator>,
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub enum Slot {
+ Wildcard,
+ Equal {
+ primary: Option<SlotName>,
+ sub: Option<SlotName>,
+ },
+ Name {
+ primary: SlotName,
+ sub: Option<SlotName>,
+ },
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
@@ -575,19 +581,29 @@ impl fmt::Display for SlotName {
impl fmt::Display for Slot {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
- if let Some(slot) = self.primary.as_ref() {
- write!(f, "{slot}")?;
- }
+ match self {
+ Self::Wildcard => write!(f, "*"),
+ Self::Equal { primary, sub } => {
+ if let Some(primary) = primary {
+ write!(f, "{primary}")?;
+ }
- if let Some(sub) = self.sub.as_ref() {
- write!(f, "/{sub}")?;
- }
+ if let Some(sub) = sub {
+ write!(f, "/{sub}")?;
+ }
- if let Some(operator) = self.operator.as_ref() {
- write!(f, "{operator}")?;
- }
+ write!(f, "=")
+ }
+ Self::Name { primary, sub } => {
+ write!(f, "{primary}")?;
- Ok(())
+ if let Some(sub) = sub {
+ write!(f, "/{sub}")?;
+ }
+
+ Ok(())
+ }
+ }
}
}