Skip to content

Commit 1708def

Browse files
committed
ffi(nostr-sdk): add Client::send_event_builder
1 parent c2d8cbf commit 1708def

File tree

2 files changed

+42
-9
lines changed

2 files changed

+42
-9
lines changed

bindings/nostr-sdk-ffi/src/client/mod.rs

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ use std::sync::Arc;
99
use std::time::Duration;
1010

1111
use nostr_ffi::{
12-
ClientMessage, Event, EventId, FileMetadata, Filter, Metadata, PublicKey, RelayMessage,
12+
ClientMessage, Event, EventBuilder, EventId, FileMetadata, Filter, Metadata, PublicKey,
13+
RelayMessage,
1314
};
1415
use nostr_sdk::client::blocking::Client as ClientSdk;
1516
use nostr_sdk::relay::RelayPoolNotification as RelayPoolNotificationSdk;
@@ -174,14 +175,10 @@ impl Client {
174175
Ok(self.inner.send_msg(msg.into())?)
175176
}
176177

177-
// TODO: add send_msg_with_custom_wait
178-
179178
pub fn send_msg_to(&self, url: String, msg: ClientMessage) -> Result<()> {
180179
Ok(self.inner.send_msg_to(url, msg.into())?)
181180
}
182181

183-
// TODO: add send_msg_to_with_custom_wait
184-
185182
pub fn send_event(&self, event: Arc<Event>) -> Result<Arc<EventId>> {
186183
Ok(Arc::new(
187184
self.inner
@@ -190,8 +187,6 @@ impl Client {
190187
))
191188
}
192189

193-
// TODO: add send_event_with_custom_wait
194-
195190
pub fn send_event_to(&self, url: String, event: Arc<Event>) -> Result<Arc<EventId>> {
196191
Ok(Arc::new(
197192
self.inner
@@ -200,7 +195,31 @@ impl Client {
200195
))
201196
}
202197

203-
// TODO: add send_event_to_with_custom_wait
198+
/// Take an [`EventBuilder`], sign it by using the [`ClientSigner`] and broadcast to all relays.
199+
///
200+
/// Rise an error if the [`ClientSigner`] is not set.
201+
pub fn send_event_builder(&self, builder: Arc<EventBuilder>) -> Result<Arc<EventId>> {
202+
Ok(Arc::new(
203+
self.inner
204+
.send_event_builder(builder.as_ref().deref().clone())?
205+
.into(),
206+
))
207+
}
208+
209+
/// Take an [`EventBuilder`], sign it by using the [`ClientSigner`] and broadcast to specific relays.
210+
///
211+
/// Rise an error if the [`ClientSigner`] is not set.
212+
pub fn send_event_builder_to(
213+
&self,
214+
url: String,
215+
builder: Arc<EventBuilder>,
216+
) -> Result<Arc<EventId>> {
217+
Ok(Arc::new(
218+
self.inner
219+
.send_event_builder_to(url, builder.as_ref().deref().clone())?
220+
.into(),
221+
))
222+
}
204223

205224
pub fn set_metadata(&self, metadata: Arc<Metadata>) -> Result<Arc<EventId>> {
206225
Ok(Arc::new(

crates/nostr-sdk/src/client/blocking.rs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ use std::time::Duration;
1111
use nostr::key::XOnlyPublicKey;
1212
use nostr::nips::nip94::FileMetadata;
1313
use nostr::url::Url;
14-
use nostr::{ClientMessage, Contact, Event, EventId, Filter, Keys, Metadata, Result, Tag};
14+
use nostr::{
15+
ClientMessage, Contact, Event, EventBuilder, EventId, Filter, Keys, Metadata, Result, Tag,
16+
};
1517
use nostr_database::DynNostrDatabase;
1618
use tokio::sync::broadcast;
1719

@@ -241,6 +243,18 @@ impl Client {
241243
RUNTIME.block_on(async { self.client.send_event_to(url, event).await })
242244
}
243245

246+
pub fn send_event_builder(&self, builder: EventBuilder) -> Result<EventId, Error> {
247+
RUNTIME.block_on(async { self.client.send_event_builder(builder).await })
248+
}
249+
250+
pub fn send_event_builder_to<U>(&self, url: U, builder: EventBuilder) -> Result<EventId, Error>
251+
where
252+
U: TryIntoUrl,
253+
pool::Error: From<<U as TryIntoUrl>::Err>,
254+
{
255+
RUNTIME.block_on(async { self.client.send_event_builder_to(url, builder).await })
256+
}
257+
244258
pub fn set_metadata(&self, metadata: &Metadata) -> Result<EventId, Error> {
245259
RUNTIME.block_on(async { self.client.set_metadata(metadata).await })
246260
}

0 commit comments

Comments
 (0)