use serde::{Deserialize, Serialize};
#[cfg(feature = "http")]
#[derive(Debug, Clone, PartialEq, Eq, Hash, Deserialize, Serialize)]
#[serde(tag = "type", content = "id")]
#[serde(rename_all = "camelCase")]
pub enum SearchResultId {
User(crate::id::User),
Avatar(crate::id::Asset),
Prop(crate::id::Asset),
World(crate::id::Asset),
}
#[cfg(feature = "http")]
impl From<SearchResultId> for crate::id::Any {
fn from(value: SearchResultId) -> Self {
match value {
SearchResultId::User(v) => v.into(),
SearchResultId::Avatar(v)
| SearchResultId::Prop(v)
| SearchResultId::World(v) => v.into(),
}
}
}
#[cfg(feature = "http")]
#[derive(Debug, Clone, PartialEq, Eq, Hash, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SearchResult {
#[serde(flatten)]
pub id: SearchResultId,
pub name: String,
pub image_url: String,
}
#[cfg(feature = "http")]
#[serde_with::serde_as]
#[derive(Debug, Clone, PartialEq, Eq, Hash, Deserialize, Serialize)]
pub struct SearchResults(
#[cfg_attr(
not(feature = "debug"),
serde_as(as = "serde_with::VecSkipError<_>")
)]
pub Vec<SearchResult>,
);