use std::collections::BTreeMap; use std::ops::Not as _; pub use radicle::storage::refs::SignedRefs; pub use radicle::storage::{Validations, git::Validation}; use radicle::{crypto::PublicKey, storage::ValidateRepository}; pub mod error { use radicle::crypto::PublicKey; use thiserror::Error; #[derive(Debug, Error)] #[non_exhaustive] pub enum RemoteRefs { #[error("required sigrefs of {0} not found")] NotFound(PublicKey), #[error(transparent)] Load(#[from] Load), } pub type Load = radicle::storage::refs::sigrefs::read::error::Read; } pub(crate) fn validate( repo: &impl ValidateRepository, sigrefs: SignedRefs, ) -> Result, radicle::storage::Error> { let remote = radicle::storage::Remote::new(sigrefs); let validations = repo.validate_remote(&remote)?; Ok(validations.is_empty().not().then_some(validations)) } /// The sigrefs found for each remote. pub(crate) type RemoteRefs = BTreeMap< PublicKey, Result, radicle::storage::refs::sigrefs::read::error::Read>, >;