upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
path: root/src/client.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/client.rs')
-rw-r--r--src/client.rs23
1 files changed, 21 insertions, 2 deletions
diff --git a/src/client.rs b/src/client.rs
index a6f7dda..e0e0494 100644
--- a/src/client.rs
+++ b/src/client.rs
@@ -18,6 +18,7 @@ use nostr::Event;
18 18
19pub struct Client { 19pub struct Client {
20 client: nostr_sdk::Client, 20 client: nostr_sdk::Client,
21 pub fallback_relays: Vec<String>,
21} 22}
22 23
23#[async_trait] 24#[async_trait]
@@ -26,6 +27,7 @@ pub trait Connect {
26 fn default() -> Self; 27 fn default() -> Self;
27 fn new(opts: Params) -> Self; 28 fn new(opts: Params) -> Self;
28 async fn connect(&self) -> Result<()>; 29 async fn connect(&self) -> Result<()>;
30 async fn disconnect(&self) -> Result<()>;
29 async fn send_event_to(&self, url: &str, event: nostr::event::Event) -> Result<nostr::EventId>; 31 async fn send_event_to(&self, url: &str, event: nostr::event::Event) -> Result<nostr::EventId>;
30} 32}
31 33
@@ -34,19 +36,31 @@ impl Connect for Client {
34 fn default() -> Self { 36 fn default() -> Self {
35 Client { 37 Client {
36 client: nostr_sdk::Client::new(&nostr::Keys::generate()), 38 client: nostr_sdk::Client::new(&nostr::Keys::generate()),
39 fallback_relays: vec![
40 "ws://localhost:8080".to_string(),
41 "ws://localhost:8052".to_string(),
42 ],
37 } 43 }
38 } 44 }
39 fn new(opts: Params) -> Self { 45 fn new(opts: Params) -> Self {
40 Client { 46 Client {
41 client: nostr_sdk::Client::new(&opts.keys.unwrap_or(nostr::Keys::generate())), 47 client: nostr_sdk::Client::new(&opts.keys.unwrap_or(nostr::Keys::generate())),
48 fallback_relays: opts.fallback_relays,
42 } 49 }
43 } 50 }
44 async fn connect(&self) -> Result<()> { 51 async fn connect(&self) -> Result<()> {
45 self.client.add_relay("ws://localhost:8080", None).await?; 52 for relay in &self.fallback_relays {
53 self.client.add_relay(relay.as_str(), None).await?;
54 }
46 self.client.connect().await; 55 self.client.connect().await;
47 // self.client.s
48 Ok(()) 56 Ok(())
49 } 57 }
58
59 async fn disconnect(&self) -> Result<()> {
60 self.client.disconnect().await?;
61 Ok(())
62 }
63
50 async fn send_event_to(&self, url: &str, event: Event) -> Result<nostr::EventId> { 64 async fn send_event_to(&self, url: &str, event: Event) -> Result<nostr::EventId> {
51 Ok(self.client.send_event_to(url, event).await?) 65 Ok(self.client.send_event_to(url, event).await?)
52 } 66 }
@@ -55,6 +69,7 @@ impl Connect for Client {
55#[derive(Default)] 69#[derive(Default)]
56pub struct Params { 70pub struct Params {
57 pub keys: Option<nostr::Keys>, 71 pub keys: Option<nostr::Keys>,
72 pub fallback_relays: Vec<String>,
58} 73}
59 74
60impl Params { 75impl Params {
@@ -62,4 +77,8 @@ impl Params {
62 self.keys = Some(keys); 77 self.keys = Some(keys);
63 self 78 self
64 } 79 }
80 pub fn with_fallback_relays(mut self, fallback_relays: Vec<String>) -> Self {
81 self.fallback_relays = fallback_relays;
82 self
83 }
65} 84}