use crate::{EventId, Pubkey}; use serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Clone)] pub struct Filter { #[serde(skip_serializing_if = "Option::is_none")] ids: Option>, #[serde(skip_serializing_if = "Option::is_none")] authors: Option>, #[serde(skip_serializing_if = "Option::is_none")] kinds: Option>, #[serde(rename = "#e")] #[serde(skip_serializing_if = "Option::is_none")] events: Option>, #[serde(rename = "#p")] #[serde(skip_serializing_if = "Option::is_none")] pubkeys: Option>, #[serde(skip_serializing_if = "Option::is_none")] since: Option, // unix timestamp seconds #[serde(skip_serializing_if = "Option::is_none")] until: Option, // unix timestamp seconds #[serde(skip_serializing_if = "Option::is_none")] limit: Option, } impl Filter { pub fn new() -> Filter { Filter { ids: None, authors: None, kinds: None, events: None, pubkeys: None, since: None, until: None, limit: None, } } pub fn ids(mut self, ids: Vec) -> Self { self.ids = Some(ids); self } pub fn authors(mut self, authors: Vec) -> Self { self.authors = Some(authors); self } pub fn kinds(mut self, kinds: Vec) -> Self { self.kinds = Some(kinds); self } pub fn events(mut self, events: Vec) -> Self { self.events = Some(events); self } pub fn pubkeys(mut self, pubkeys: Vec) -> Self { self.pubkeys = Some(pubkeys); self } pub fn since(mut self, since: u64) -> Self { self.since = Some(since); self } pub fn until(mut self, until: u64) -> Self { self.until = Some(until); self } pub fn limit(mut self, limit: u16) -> Self { self.limit = Some(limit); self } }