radrootsd

JSON-RPC bridge for Radroots event publishing
git clone https://radroots.dev/git/radrootsd.git
Log | Files | Refs | README | LICENSE

state.rs (2203B)


      1 use crate::app::identity_storage::DaemonIdentity;
      2 use crate::host_nostr::{DaemonNostrClient, Keys, PublicKey};
      3 use anyhow::Result;
      4 
      5 use crate::app::config::{Nip46Config, TransportPublishConfig};
      6 use crate::core::transport_publish::TransportPublish;
      7 
      8 #[derive(Clone)]
      9 pub struct Radrootsd {
     10     pub(crate) client: DaemonNostrClient,
     11     pub keys: Keys,
     12     pub pubkey: PublicKey,
     13     pub transport_publish: TransportPublish,
     14     pub(crate) nip46_sessions: crate::core::nip46::session::Nip46SessionStore,
     15     pub nip46_config: Nip46Config,
     16 }
     17 
     18 impl Radrootsd {
     19     pub(crate) fn new(
     20         identity: DaemonIdentity,
     21         transport_publish_config: TransportPublishConfig,
     22         nip46_config: Nip46Config,
     23     ) -> Result<Self> {
     24         let keys: Keys = identity.keys().clone();
     25         let pubkey = keys.public_key();
     26         let client = DaemonNostrClient::with_keys(keys.clone());
     27         #[cfg(test)]
     28         let transport_publish = TransportPublish::memory(transport_publish_config)?;
     29         #[cfg(not(test))]
     30         let transport_publish = TransportPublish::open(transport_publish_config)?;
     31         let nip46_sessions = crate::core::nip46::session::Nip46SessionStore::new();
     32 
     33         Ok(Self {
     34             client,
     35             keys,
     36             pubkey,
     37             transport_publish,
     38             nip46_sessions,
     39             nip46_config,
     40         })
     41     }
     42 }
     43 
     44 #[cfg(test)]
     45 mod tests {
     46     use super::Radrootsd;
     47     use crate::app::config::{Nip46Config, TransportPublishConfig};
     48     use crate::app::identity_storage::DaemonIdentity;
     49 
     50     #[test]
     51     fn new_sets_core_fields() {
     52         let identity = DaemonIdentity::generate();
     53         let transport_publish_cfg = TransportPublishConfig::default();
     54         let cfg = Nip46Config::default();
     55         let state = Radrootsd::new(identity.clone(), transport_publish_cfg.clone(), cfg.clone())
     56             .expect("state");
     57 
     58         assert_eq!(state.pubkey, identity.public_key());
     59         assert_eq!(
     60             state.transport_publish.config.enabled,
     61             transport_publish_cfg.enabled
     62         );
     63         assert_eq!(state.nip46_config.session_ttl_secs, cfg.session_ttl_secs);
     64         assert_eq!(state.nip46_config.perms, cfg.perms);
     65     }
     66 }