feat: nip-89
This commit is contained in:
@ -34,6 +34,8 @@ pub struct ReqFilter {
|
||||
pub a_tag: Option<HashSet<String>>,
|
||||
#[serde(rename = "#g", skip_serializing_if = "Option::is_none")]
|
||||
pub g_tag: Option<HashSet<String>>,
|
||||
#[serde(rename = "#k", skip_serializing_if = "Option::is_none")]
|
||||
pub k_tag: Option<HashSet<String>>,
|
||||
#[serde(rename = "relays", skip_serializing_if = "Option::is_none")]
|
||||
pub relays: Option<HashSet<String>>,
|
||||
#[serde(rename = "search", skip_serializing_if = "Option::is_none")]
|
||||
@ -75,6 +77,8 @@ pub struct FlatReqFilter {
|
||||
pub a_tag: Option<String>,
|
||||
#[serde(rename = "#g", skip_serializing_if = "Option::is_none")]
|
||||
pub g_tag: Option<String>,
|
||||
#[serde(rename = "#k", skip_serializing_if = "Option::is_none")]
|
||||
pub k_tag: Option<String>,
|
||||
#[serde(rename = "search", skip_serializing_if = "Option::is_none")]
|
||||
pub search: Option<String>,
|
||||
#[serde(rename = "relay", skip_serializing_if = "Option::is_none")]
|
||||
@ -129,6 +133,7 @@ impl Distance for FlatReqFilter {
|
||||
ret += prop_dist(&self.r_tag, &b.r_tag);
|
||||
ret += prop_dist(&self.t_tag, &b.t_tag);
|
||||
ret += prop_dist(&self.g_tag, &b.g_tag);
|
||||
ret += prop_dist(&self.k_tag, &b.k_tag);
|
||||
|
||||
ret
|
||||
}
|
||||
@ -163,6 +168,7 @@ impl From<Vec<&FlatReqFilter>> for ReqFilter {
|
||||
array_prop_append(&x.r_tag, &mut acc.r_tag);
|
||||
array_prop_append(&x.a_tag, &mut acc.a_tag);
|
||||
array_prop_append(&x.g_tag, &mut acc.g_tag);
|
||||
array_prop_append(&x.k_tag, &mut acc.k_tag);
|
||||
acc.search = x.search.to_owned();
|
||||
acc.since = x.since;
|
||||
acc.until = x.until;
|
||||
@ -188,6 +194,7 @@ impl From<Vec<&ReqFilter>> for ReqFilter {
|
||||
array_prop_append_vec(&x.r_tag, &mut acc.r_tag);
|
||||
array_prop_append_vec(&x.a_tag, &mut acc.a_tag);
|
||||
array_prop_append_vec(&x.g_tag, &mut acc.g_tag);
|
||||
array_prop_append_vec(&x.k_tag, &mut acc.k_tag);
|
||||
acc.search = x.search.to_owned();
|
||||
acc.since = x.since;
|
||||
acc.until = x.until;
|
||||
@ -281,6 +288,14 @@ impl Into<Vec<FlatReqFilter>> for &ReqFilter {
|
||||
inputs.push(t_ids);
|
||||
}
|
||||
|
||||
if let Some(k_tags) = &self.k_tag {
|
||||
let t_ids = k_tags
|
||||
.iter()
|
||||
.map(|z| StringOrNumberEntry::String(("k_tag", z)))
|
||||
.collect();
|
||||
inputs.push(t_ids);
|
||||
}
|
||||
|
||||
for p in inputs.iter().multi_cartesian_product() {
|
||||
ret.push(FlatReqFilter {
|
||||
id: p.iter().find_map(|q| {
|
||||
@ -371,6 +386,14 @@ impl Into<Vec<FlatReqFilter>> for &ReqFilter {
|
||||
}
|
||||
None
|
||||
}),
|
||||
k_tag: p.iter().find_map(|q| {
|
||||
if let StringOrNumberEntry::String((k, v)) = q {
|
||||
if (*k).eq("k_tag") {
|
||||
return Some((*v).to_string());
|
||||
}
|
||||
}
|
||||
None
|
||||
}),
|
||||
search: self.search.to_owned(),
|
||||
since: self.since,
|
||||
until: self.until,
|
||||
@ -395,6 +418,8 @@ impl Distance for ReqFilter {
|
||||
ret += prop_dist_vec(&self.r_tag, &b.r_tag);
|
||||
ret += prop_dist_vec(&self.t_tag, &b.t_tag);
|
||||
ret += prop_dist_vec(&self.a_tag, &b.a_tag);
|
||||
ret += prop_dist_vec(&self.g_tag, &b.g_tag);
|
||||
ret += prop_dist_vec(&self.k_tag, &b.k_tag);
|
||||
|
||||
ret
|
||||
}
|
||||
|
Reference in New Issue
Block a user