pub(crate) mod detail;
use derive_builder::Builder;
use serde::{Deserialize, Serialize};
use crate::api::v2::exercise::Exercise;
use crate::api::v2::solution::Solution;
#[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>,
pub include_solutions: bool,
}
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, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Response {
pub exercises: Vec<Exercise>,
#[serde(default)]
pub solutions: Vec<Solution>,
}