From 56d3924e46bf0450383ff0f6af4e37dba1c499a3 Mon Sep 17 00:00:00 2001 From: Ren Amamiya Date: Tue, 13 Oct 2026 10:41:44 +0700 Subject: [PATCH] Make signing functions generic over the signer trait --- crates/signed_state/src/backend.rs | 11 +++++++---- crates/signed_state/src/push.rs | 10 ++++++---- crates/signed_state/src/repo.rs | 10 ++++++---- 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/crates/signed_state/src/backend.rs b/crates/signed_state/src/backend.rs index 6d847db..de1a045 100644 --- a/crates/signed_state/src/backend.rs +++ b/crates/signed_state/src/backend.rs @@ -1189,9 +1189,9 @@ fn build_announcement( // Announce the repository, then stage the state event and push. #[allow(clippy::too_many_arguments)] -async fn announce_repository_and_push( +async fn announce_repository_and_push( client: &Client, - signer: &UniversalSigner, + signer: &S, announcement: GitRepositoryAnnouncement, repo_id: &str, owner: &str, @@ -1201,7 +1201,10 @@ async fn announce_repository_and_push( path: &Path, cx: &mut AsyncApp, push: impl Fn(&Path, &str, &str, &str) -> Result<(), Error> + Send + 'static, -) -> Result { +) -> Result +where + S: AsyncGetPublicKey + AsyncSignEvent + Clone, +{ for url in servers { if let Err(e) = client.add_relay(url).and_connect().await { log::warn!("failed to connect grasp relay {url}: {e}"); @@ -1227,7 +1230,7 @@ async fn announce_repository_and_push( } else { let push = { let client = client.clone(); - let signer = signer.clone(); + let signer = S::clone(signer); let repo_id = repo_id.to_owned(); let owner = owner.to_owned(); let servers = servers.to_vec(); diff --git a/crates/signed_state/src/push.rs b/crates/signed_state/src/push.rs index 920bcd6..56f7171 100644 --- a/crates/signed_state/src/push.rs +++ b/crates/signed_state/src/push.rs @@ -4,7 +4,6 @@ use anyhow::Error; use nostr::prelude::Url; use nostr_sdk::prelude::*; use signed_core::RepoState; -use signed_nostr::UniversalSigner; /// `ws://` grasp servers, like ngit, use `http(s)://`. pub(crate) fn grasp_base_url(relay: &RelayUrl) -> Option { @@ -130,9 +129,9 @@ impl PushOutcome { } #[allow(clippy::too_many_arguments)] -pub(crate) async fn push_staged_to_grasps( +pub(crate) async fn push_staged_to_grasps( client: &Client, - signer: &UniversalSigner, + signer: &S, repo_id: &str, refs: &[(String, String)], head: Option<&str>, @@ -140,7 +139,10 @@ pub(crate) async fn push_staged_to_grasps( owner: &str, servers: &[RelayUrl], push: impl Fn(&Path, &str, &str, &str) -> Result<(), Error>, -) -> PushOutcome { +) -> PushOutcome +where + S: AsyncGetPublicKey + AsyncSignEvent + ?Sized, +{ let mut outcome = PushOutcome::default(); for relay in servers { diff --git a/crates/signed_state/src/repo.rs b/crates/signed_state/src/repo.rs index b482fb7..fba0a34 100644 --- a/crates/signed_state/src/repo.rs +++ b/crates/signed_state/src/repo.rs @@ -12,7 +12,6 @@ use signed_core::{ filters, }; use signed_git::{Nip34Binding, Repo}; -use signed_nostr::UniversalSigner; use crate::backend::{Backend, BackendEvent}; use crate::bootstrap::user_grasp_list_servers; @@ -1401,16 +1400,19 @@ fn resolve_statuses( /// Publish a patch series as a sequence of `git/patch` events. #[allow(clippy::too_many_arguments)] -async fn publish_patch_series( +async fn publish_patch_series( client: &Client, - signer: &UniversalSigner, + signer: &S, addr: &RepoAddr, owner: PublicKey, euc: Option<&str>, series: &PatchSeries, first_marker: &str, reply_to: Option, -) -> Result { +) -> Result +where + S: AsyncGetPublicKey + AsyncSignEvent + ?Sized, +{ let mut root: Option = None; let mut previous = reply_to;