filter.rs (1189B)
1 use crate::error::RadrootsNostrError; 2 use crate::types::{RadrootsNostrFilter, RadrootsNostrKind, RadrootsNostrTimestamp}; 3 4 pub fn radroots_nostr_filter_tag( 5 filter: RadrootsNostrFilter, 6 tag: &str, 7 values: Vec<String>, 8 ) -> Result<RadrootsNostrFilter, RadrootsNostrError> { 9 let mut chars = tag.chars(); 10 let tag_char = chars 11 .next() 12 .ok_or_else(|| RadrootsNostrError::FilterTagError("tag is empty".to_string()))?; 13 if chars.next().is_some() { 14 return Err(RadrootsNostrError::FilterTagError( 15 "tag must be a single letter".to_string(), 16 )); 17 } 18 let tag_key = nostr::filter::SingleLetterTag::from_char(tag_char) 19 .map_err(|err| RadrootsNostrError::FilterTagError(err.to_string()))?; 20 Ok(filter.custom_tags(tag_key, values)) 21 } 22 23 pub fn radroots_nostr_kind(kind: u16) -> RadrootsNostrKind { 24 RadrootsNostrKind::Custom(kind) 25 } 26 27 pub fn radroots_nostr_filter_kind(kind: u16) -> RadrootsNostrFilter { 28 RadrootsNostrFilter::new().kind(RadrootsNostrKind::Custom(kind)) 29 } 30 31 pub fn radroots_nostr_filter_new_events(filter: RadrootsNostrFilter) -> RadrootsNostrFilter { 32 filter.since(RadrootsNostrTimestamp::now()) 33 }