use alloc::string::String;
use alloc::vec::Vec;
use super::nip01::Coordinate;
use crate::{EventId, PublicKey, Tag, TagStandard, Url};
#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct MuteList {
pub public_keys: Vec<PublicKey>,
pub hashtags: Vec<String>,
pub event_ids: Vec<EventId>,
pub words: Vec<String>,
}
impl From<MuteList> for Vec<Tag> {
fn from(
MuteList {
public_keys,
hashtags,
event_ids,
words,
}: MuteList,
) -> Self {
let mut tags =
Vec::with_capacity(public_keys.len() + hashtags.len() + event_ids.len() + words.len());
tags.extend(public_keys.into_iter().map(Tag::public_key));
tags.extend(hashtags.into_iter().map(Tag::hashtag));
tags.extend(event_ids.into_iter().map(Tag::event));
tags.extend(
words
.into_iter()
.map(TagStandard::Word)
.map(Tag::from_standardized),
);
tags
}
}
#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct Bookmarks {
pub event_ids: Vec<EventId>,
pub coordinate: Vec<Coordinate>,
pub hashtags: Vec<String>,
pub urls: Vec<Url>,
}
impl From<Bookmarks> for Vec<Tag> {
fn from(
Bookmarks {
event_ids,
coordinate,
hashtags,
urls,
}: Bookmarks,
) -> Self {
let mut tags =
Vec::with_capacity(event_ids.len() + coordinate.len() + hashtags.len() + urls.len());
tags.extend(event_ids.into_iter().map(Tag::event));
tags.extend(coordinate.into_iter().map(Tag::from));
tags.extend(hashtags.into_iter().map(Tag::hashtag));
tags.extend(
urls.into_iter()
.map(TagStandard::Url)
.map(Tag::from_standardized),
);
tags
}
}
#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct Interests {
pub hashtags: Vec<String>,
pub coordinate: Vec<Coordinate>,
}
impl From<Interests> for Vec<Tag> {
fn from(
Interests {
hashtags,
coordinate,
}: Interests,
) -> Self {
let mut tags = Vec::with_capacity(hashtags.len() + coordinate.len());
tags.extend(hashtags.into_iter().map(Tag::hashtag));
tags.extend(coordinate.into_iter().map(Tag::from));
tags
}
}
#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct Emojis {
pub emojis: Vec<(String, Url)>,
pub coordinate: Vec<Coordinate>,
}
impl From<Emojis> for Vec<Tag> {
fn from(Emojis { emojis, coordinate }: Emojis) -> Self {
let mut tags = Vec::with_capacity(emojis.len() + coordinate.len());
tags.extend(emojis.into_iter().map(|(s, url)| {
Tag::from_standardized_without_cell(TagStandard::Emoji { shortcode: s, url })
}));
tags.extend(coordinate.into_iter().map(Tag::from));
tags
}
}
#[derive(Debug, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct ArticlesCuration {
pub coordinate: Vec<Coordinate>,
pub event_ids: Vec<EventId>,
}
impl From<ArticlesCuration> for Vec<Tag> {
fn from(
ArticlesCuration {
coordinate,
event_ids,
}: ArticlesCuration,
) -> Self {
let mut tags = Vec::with_capacity(coordinate.len() + event_ids.len());
tags.extend(coordinate.into_iter().map(Tag::from));
tags.extend(event_ids.into_iter().map(Tag::event));
tags
}
}