pub(crate) mod detail;
use derive_builder::Builder;
use serde::{Deserialize, Serialize};
use strum::{AsRefStr, Display, EnumString, IntoStaticStr, VariantNames};
use crate::api::v2::track::Track;
#[derive(Debug, Clone, Default, Builder)]
#[builder(
derive(Debug),
default,
setter(strip_option),
build_fn(private, name = "fallible_build", error = "detail::FiltersBuilderError")
)]
pub struct Filters<'a> {
#[builder(setter(into))]
pub criteria: Option<&'a str>,
#[builder(setter(into, each(name = "tag")))]
pub tags: Vec<&'a str>,
pub status: Option<StatusFilter>,
}
impl<'a> Filters<'a> {
#[cfg_attr(not(coverage), tracing::instrument(level = "trace"))]
pub fn builder() -> FiltersBuilder<'a> {
FiltersBuilder::default()
}
}
impl<'a> FiltersBuilder<'a> {
#[cfg_attr(not(coverage), tracing::instrument(ret, level = "trace"))]
pub fn build(&self) -> Filters<'a> {
self.fallible_build()
.expect("All fields should have had default values")
}
}
#[derive(
Debug,
Default,
Copy,
Clone,
PartialEq,
Eq,
AsRefStr,
Display,
EnumString,
IntoStaticStr,
VariantNames,
)]
#[strum(serialize_all = "snake_case")]
pub enum StatusFilter {
#[default]
All,
Joined,
Unjoined,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Response {
pub tracks: Vec<Track>,
}