Add RepoId
This commit is contained in:
parent
3855d86730
commit
58cd4d7517
1 changed files with 47 additions and 1 deletions
|
|
@ -87,7 +87,7 @@ impl FromStr for NoteId {
|
||||||
|
|
||||||
impl Serialize for NoteId {
|
impl Serialize for NoteId {
|
||||||
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
|
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
|
||||||
format!("{self}").serialize(serializer)
|
self.to_string().serialize(serializer)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -98,3 +98,49 @@ impl<'de> Deserialize<'de> for NoteId {
|
||||||
.map_err(|()| serde::de::Error::custom("invalid note id"))
|
.map_err(|()| serde::de::Error::custom("invalid note id"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// The id for a note repository.
|
||||||
|
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
||||||
|
pub struct RepoId(TimestampId);
|
||||||
|
|
||||||
|
impl RepoId {
|
||||||
|
#[allow(clippy::new_without_default)] // Because side-effects
|
||||||
|
pub fn new() -> Self {
|
||||||
|
Self(TimestampId::new())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl fmt::Debug for RepoId {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
write!(f, "RepoId({self})")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl fmt::Display for RepoId {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
write!(f, "r{}", self.0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl FromStr for RepoId {
|
||||||
|
type Err = ();
|
||||||
|
|
||||||
|
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||||
|
let s = s.strip_prefix("r").ok_or(())?;
|
||||||
|
Ok(Self(s.parse()?))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Serialize for RepoId {
|
||||||
|
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
|
||||||
|
self.to_string().serialize(serializer)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'de> Deserialize<'de> for RepoId {
|
||||||
|
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
|
||||||
|
<&'de str as Deserialize<'de>>::deserialize(deserializer)?
|
||||||
|
.parse()
|
||||||
|
.map_err(|()| serde::de::Error::custom("invalid repo id"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue