derive Hash for Atom and similar types

This commit is contained in:
John Turner
2025-11-23 03:30:37 +00:00
parent f8149b43d4
commit 5be1e5c37a
2 changed files with 29 additions and 25 deletions

View File

@@ -12,13 +12,13 @@ use itertools::Itertools;
mod parsers;
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub enum Blocker {
Weak,
Strong,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub enum VersionOperator {
Lt,
Gt,
@@ -28,19 +28,20 @@ pub enum VersionOperator {
Roughly,
}
#[derive(Clone, Debug, PartialEq, Eq, Get)]
#[derive(Clone, Debug, PartialEq, Eq, Hash, Get)]
pub struct Category(#[get(method = "get", kind = "deref")] String);
#[derive(Clone, Debug, PartialEq, Eq, Get)]
#[derive(Clone, Debug, PartialEq, Eq, Hash, Get)]
pub struct Name(#[get(method = "get", kind = "deref")] String);
#[derive(Clone, Debug, Get)]
#[derive(Clone, Debug, Hash, Get)]
pub struct VersionNumber(#[get(method = "get", kind = "deref")] String);
#[derive(Debug, Clone, Get)]
#[allow(clippy::derived_hash_with_manual_eq)]
#[derive(Debug, Clone, Hash, Get)]
struct VersionNumbers(#[get(method = "get", kind = "deref")] Vec<VersionNumber>);
#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum VersionSuffixKind {
Alpha,
Beta,
@@ -49,19 +50,22 @@ pub enum VersionSuffixKind {
P,
}
#[derive(Clone, Debug, Get)]
#[allow(clippy::derived_hash_with_manual_eq)]
#[derive(Clone, Debug, Hash, Get)]
pub struct VersionSuffix {
kind: VersionSuffixKind,
number: Option<VersionNumber>,
}
#[derive(Debug, Clone, Get)]
#[allow(clippy::derived_hash_with_manual_eq)]
#[derive(Debug, Clone, Hash, Get)]
pub struct VersionSuffixes(#[get(method = "get", kind = "deref")] Vec<VersionSuffix>);
#[derive(Debug, Clone, Get, PartialEq, Eq)]
#[derive(Debug, Clone, Get, PartialEq, Eq, Hash)]
pub struct BuildId(#[get(method = "get", kind = "deref")] String);
#[derive(Clone, Debug, Get)]
#[allow(clippy::derived_hash_with_manual_eq)]
#[derive(Clone, Debug, Hash, Get)]
pub struct Version {
numbers: VersionNumbers,
letter: Option<char>,
@@ -70,19 +74,19 @@ pub struct Version {
build_id: Option<BuildId>,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub struct Wildcard;
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub enum SlotOperator {
Eq,
Star,
}
#[derive(Clone, Debug, PartialEq, Eq, Get)]
#[derive(Clone, Debug, PartialEq, Eq, Hash, Get)]
pub struct SlotName(#[get(method = "name", kind = "deref")] String);
#[derive(Clone, Debug, PartialEq, Eq)]
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
pub enum Slot {
Wildcard,
Equal,
@@ -96,28 +100,28 @@ pub enum Slot {
},
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub enum UseDepNegate {
Minus,
Exclamation,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub enum UseDepSign {
Enabled,
Disabled,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub enum UseDepCondition {
Eq,
Question,
}
#[derive(Clone, Debug, PartialEq, Eq)]
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
pub struct Repo(String);
#[derive(Clone, Debug, PartialEq, Eq, Get)]
#[derive(Clone, Debug, PartialEq, Eq, Hash, Get)]
pub struct UseDep {
negate: Option<UseDepNegate>,
flag: UseFlag,
@@ -125,13 +129,13 @@ pub struct UseDep {
condition: Option<UseDepCondition>,
}
#[derive(Clone, Debug, PartialEq, Eq, Get)]
#[derive(Clone, Debug, PartialEq, Eq, Hash, Get)]
pub struct Cp {
category: Category,
name: Name,
}
#[derive(Clone, Debug, PartialEq, Eq, Get)]
#[derive(Clone, Debug, PartialEq, Eq, Hash, Get)]
pub struct Cpv {
category: Category,
name: Name,
@@ -139,7 +143,7 @@ pub struct Cpv {
slot: Option<Slot>,
}
#[derive(Clone, Debug, Get, PartialEq, Eq)]
#[derive(Clone, Debug, Get, PartialEq, Eq, Hash)]
pub struct Atom {
blocker: Option<Blocker>,
category: Category,

View File

@@ -4,10 +4,10 @@ use get::Get;
mod parsers;
#[derive(Clone, Debug, PartialEq, Eq, Get)]
#[derive(Clone, Debug, PartialEq, Eq, Hash, Get)]
pub struct UseFlag(#[get(method = "name", kind = "deref")] String);
#[derive(Clone, Debug, PartialEq, Eq, Get)]
#[derive(Clone, Debug, PartialEq, Eq, Hash, Get)]
pub struct IUseFlag {
default: bool,
flag: UseFlag,