From 0ce12fc8682bca363fc3a15ab60934d8cc85722c Mon Sep 17 00:00:00 2001 From: sevki Date: Tue, 21 Jan 2025 13:21:19 +0000 Subject: [PATCH] feat: try from okid --- src/fingerprint.rs | 11 +++++++++++ src/lib.rs | 2 +- src/ulid.rs | 11 +++++++++++ src/uuid.rs | 11 +++++++++++ 4 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/fingerprint.rs b/src/fingerprint.rs index 09ae805..a4f4f71 100644 --- a/src/fingerprint.rs +++ b/src/fingerprint.rs @@ -34,3 +34,14 @@ impl FromStr for Fingerprint { Ok(Fingerprint(u64::from_be_bytes(hash))) } } + +impl TryFrom for u64 { + type Error = super::Error; + + fn try_from(value: OkId) -> Result { + match value.digest { + Digest::Fingerprint(Fingerprint(value)) => Ok(value), + _ => Err(super::Error::InvalidHashType), + } + } +} diff --git a/src/lib.rs b/src/lib.rs index 0a5e891..7e576da 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -627,7 +627,7 @@ impl std::convert::AsRef<[u8]> for OkId { } /// Create a path-safe string from an OkId -pub fn pathsafe(id: OkId) -> impl AsRef<[u8]> { +pub fn pathsafe(id: OkId) -> String { format!("1/{}", id.to_string().replace(SEPARATOR, "/")) } diff --git a/src/ulid.rs b/src/ulid.rs index ba1e81f..3637f77 100644 --- a/src/ulid.rs +++ b/src/ulid.rs @@ -39,3 +39,14 @@ impl From for ulid::Ulid { ulid::Ulid(val.0) } } + +impl TryFrom for ulid::Ulid { + type Error = crate::Error; + + fn try_from(value: OkId) -> Result { + match value.digest { + super::Digest::Ulid(ulid) => Ok(ulid.into()), + _ => Err(crate::Error::InvalidHashType), + } + } +} diff --git a/src/uuid.rs b/src/uuid.rs index 91fc382..74c2b49 100644 --- a/src/uuid.rs +++ b/src/uuid.rs @@ -39,3 +39,14 @@ impl From for uuid::Uuid { uuid::Uuid::from_u128(val.0) } } + +impl TryFrom for uuid::Uuid { + type Error = crate::Error; + + fn try_from(value: OkId) -> Result { + match value.digest { + super::Digest::Uuid(uuid) => Ok(uuid.into()), + _ => Err(crate::Error::InvalidHashType), + } + } +}