//! Relay metadata using NIP-11 /// Relay Info use crate::config::Settings; use serde::{Deserialize, Serialize}; pub const CARGO_PKG_VERSION: Option<&'static str> = option_env!("CARGO_PKG_VERSION"); #[derive(Debug, Serialize, Deserialize)] #[allow(unused)] pub struct RelayInfo { #[serde(skip_serializing_if = "Option::is_none")] pub id: Option<String>, #[serde(skip_serializing_if = "Option::is_none")] pub name: Option<String>, #[serde(skip_serializing_if = "Option::is_none")] pub description: Option<String>, #[serde(skip_serializing_if = "Option::is_none")] pub pubkey: Option<String>, #[serde(skip_serializing_if = "Option::is_none")] pub contact: Option<String>, #[serde(skip_serializing_if = "Option::is_none")] pub supported_nips: Option<Vec<i64>>, #[serde(skip_serializing_if = "Option::is_none")] pub software: Option<String>, #[serde(skip_serializing_if = "Option::is_none")] pub version: Option<String>, } /// Convert an Info configuration into public Relay Info impl From<Settings> for RelayInfo { fn from(c: Settings) -> Self { let mut supported_nips = vec![1, 2, 9, 11, 12, 15, 16, 20, 22, 33, 40, 42]; if c.authorization.nip42_auth { supported_nips.push(42); supported_nips.sort(); } let i = c.info; RelayInfo { id: i.relay_url, name: i.name, description: i.description, pubkey: i.pubkey, contact: i.contact, supported_nips: Some(supported_nips), software: Some("https://git.sr.ht/~gheartsfield/nostr-rs-relay".to_owned()), version: CARGO_PKG_VERSION.map(std::borrow::ToOwned::to_owned), } } }