pub mod store;
pub use store::{Error, Store};
use localtime::LocalTime;
use crate::node::KnownAddress;
use crate::prelude::NodeId;
use crate::storage::ReadRepository;
#[derive(Debug, Copy, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
pub struct SyncedAt {
pub oid: crate::git::Oid,
pub timestamp: LocalTime,
}
impl SyncedAt {
pub fn new<S: ReadRepository>(
oid: crate::git::Oid,
repo: &S,
) -> Result<Self, crate::git::raw::Error> {
let timestamp = repo.commit(oid)?.time();
let timestamp = LocalTime::from_secs(timestamp.seconds() as u64);
Ok(Self { oid, timestamp })
}
}
impl Ord for SyncedAt {
fn cmp(&self, other: &Self) -> std::cmp::Ordering {
self.timestamp.cmp(&other.timestamp)
}
}
impl PartialOrd for SyncedAt {
fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
Some(self.cmp(other))
}
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SyncedSeed {
pub nid: NodeId,
pub addresses: Vec<KnownAddress>,
pub synced_at: SyncedAt,
}