feat: store events in SQLite and allow querying

Events are persisted in a local database, and can be queried through
subscriptions.
This commit is contained in:
Greg Heartsfield
2021-12-11 15:48:59 -06:00
parent 23f47899cd
commit 65969a4121
11 changed files with 442 additions and 55 deletions
+40 -8
View File
@@ -124,18 +124,35 @@ impl Event {
serde_json::Value::Array(tags)
}
// check if given event is referenced in a tag
pub fn event_tag_match(&self, eventid: &str) -> bool {
// get set of event tags
pub fn get_event_tags(&self) -> Vec<&str> {
let mut etags = vec![];
for t in self.tags.iter() {
if t.len() == 2 {
if t.get(0).unwrap() == "#e" {
if t.get(1).unwrap() == eventid {
return true;
}
if t.len() >= 2 {
if t.get(0).unwrap() == "e" {
etags.push(&t.get(1).unwrap()[..]);
}
}
}
return false;
etags
}
// get set of pubkey tags
pub fn get_pubkey_tags(&self) -> Vec<&str> {
let mut ptags = vec![];
for t in self.tags.iter() {
if t.len() >= 2 {
if t.get(0).unwrap() == "p" {
ptags.push(&t.get(1).unwrap()[..]);
}
}
}
ptags
}
// check if given event is referenced in a tag
pub fn event_tag_match(&self, eventid: &str) -> bool {
self.get_event_tags().contains(&eventid)
}
}
@@ -170,6 +187,21 @@ mod tests {
Ok(())
}
#[test]
fn empty_event_tag_match() -> Result<()> {
let event = simple_event();
assert!(!event.event_tag_match("foo"));
Ok(())
}
#[test]
fn single_event_tag_match() -> Result<()> {
let mut event = simple_event();
event.tags = vec![vec!["e".to_owned(), "foo".to_owned()]];
assert!(event.event_tag_match("foo"));
Ok(())
}
#[test]
fn event_tags_serialize() -> Result<()> {
// serialize an event with tags to JSON string