summaryrefslogtreecommitdiff
path: root/src/login/id.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/login/id.rs')
-rw-r--r--src/login/id.rs27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/login/id.rs b/src/login/id.rs
new file mode 100644
index 0000000..ab16a15
--- /dev/null
+++ b/src/login/id.rs
@@ -0,0 +1,27 @@
+use crate::user;
+
+pub type Id = crate::id::Id<Login>;
+
+// Login IDs and user IDs are typewise-distinct as they identify things in different namespaces, but
+// in practice a login and its associated user _must_ have IDs that encode to the same value. The
+// two ID types are made interconvertible (via `From`) for this purpose.
+impl From<user::Id> for Id {
+ fn from(user: user::Id) -> Self {
+ Self::from(String::from(user))
+ }
+}
+
+impl PartialEq<user::Id> for Id {
+ fn eq(&self, other: &user::Id) -> bool {
+ self.as_str().eq(other.as_str())
+ }
+}
+
+#[derive(Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)]
+pub struct Login;
+
+impl crate::id::Prefix for Login {
+ fn prefix(&self) -> &'static str {
+ user::id::User.prefix()
+ }
+}