mirror: revert trigger to miette::Result, drop awkward Quire/Secret variants
https://claude.ai/code/session_01MtUMXi7Z3GCDWQFY8puWpu
change
commit be7c1bb3b0c353e00106d77b9d5b73213f71f7b9
author Claude <noreply@anthropic.com>
date
parent 21086ac0
diff --git a/quire-server/src/mirror.rs b/quire-server/src/mirror.rs
index bd128c4..23837af 100644
--- a/quire-server/src/mirror.rs
+++ b/quire-server/src/mirror.rs
@@ -2,25 +2,20 @@
 //!
 //! Triggered from the push event handler, independent of CI.
 
+use miette::{Diagnostic, IntoDiagnostic as _};
 use quire_core::event::{PushEvent, PushRef};
 use thiserror::Error;
 
 use crate::quire::Quire;
 
-#[derive(Debug, Error, miette::Diagnostic)]
+#[derive(Debug, Error, Diagnostic)]
 #[error("mirror: {} ref(s) failed", errors.len())]
 struct MirrorErrors {
     #[related]
     errors: Vec<MirrorError>,
 }
 
-impl From<MirrorError> for MirrorErrors {
-    fn from(e: MirrorError) -> Self {
-        MirrorErrors { errors: vec![e] }
-    }
-}
-
-#[derive(Debug, Error, miette::Diagnostic)]
+#[derive(Debug, Error, Diagnostic)]
 enum MirrorError {
     #[error("repo not found on disk: {0}")]
     RepoNotFound(String),
@@ -34,15 +29,8 @@ enum MirrorError {
     #[error(transparent)]
     App(#[from] crate::Error),
 
-    #[error(transparent)]
-    Secret(#[from] quire_core::secret::Error),
-
     #[error(transparent)]
     Io(#[from] std::io::Error),
-
-    #[error("{0}")]
-    #[diagnostic(transparent)]
-    Quire(miette::Report),
 }
 
 /// Mirror updated refs to a configured remote.
@@ -50,22 +38,19 @@ enum MirrorError {
 /// Reads `github.mirror-token` from global config for auth. For each updated
 /// ref, reads `.quire/config.fnl` at the new SHA to obtain the `github.mirror`
 /// URL. Skips repos with no mirror URL configured.
-pub fn trigger(
-    quire: &Quire,
-    event: &PushEvent,
-) -> Result<(), impl miette::Diagnostic + Send + Sync + 'static> {
-    let repo = quire.repo(&event.repo).map_err(MirrorError::Quire)?;
+pub fn trigger(quire: &Quire, event: &PushEvent) -> miette::Result<()> {
+    let repo = quire.repo(&event.repo)?;
     if !repo.exists() {
         return Err(MirrorError::RepoNotFound(event.repo.clone()).into());
     }
 
-    let config = quire.global_config().map_err(MirrorError::App)?;
+    let config = quire.global_config().into_diagnostic()?;
     let mirror_token = config
         .github
         .mirror_token
         .map(|s| s.reveal().map(str::to_owned))
         .transpose()
-        .map_err(MirrorError::Secret)?;
+        .into_diagnostic()?;
 
     let errors: Vec<MirrorError> = event
         .updated_refs()
@@ -76,7 +61,7 @@ pub fn trigger(
     if errors.is_empty() {
         Ok(())
     } else {
-        Err(MirrorErrors { errors })
+        Err(MirrorErrors { errors }.into())
     }
 }