use serde::Deserialize;
use crate::data::{Compose, ComposeRequest, FedoraRelease};
use crate::error::QueryError;
use crate::request::{RequestMethod, SingleRequest};
#[derive(Debug)]
pub struct ComposeReleaseRequestQuery<'a> {
release: &'a FedoraRelease,
request: ComposeRequest,
}
#[derive(Debug, Deserialize)]
pub struct ComposePage {
compose: Compose,
}
impl<'a> ComposeReleaseRequestQuery<'a> {
pub fn new(release: &'a FedoraRelease, request: ComposeRequest) -> Self {
ComposeReleaseRequestQuery { release, request }
}
}
impl<'a> SingleRequest<ComposePage, Compose> for ComposeReleaseRequestQuery<'a> {
fn method(&self) -> RequestMethod {
RequestMethod::GET
}
fn path(&self) -> Result<String, QueryError> {
Ok(format!("/composes/{}/{}", self.release, self.request))
}
fn parse(&self, string: &str) -> Result<ComposePage, QueryError> {
let page: ComposePage = serde_json::from_str(string)?;
Ok(page)
}
fn extract(&self, page: ComposePage) -> Compose {
page.compose
}
}
#[derive(Debug, Default)]
pub struct ComposeQuery {}
#[derive(Debug, Deserialize)]
pub struct ComposeListPage {
composes: Vec<Compose>,
}
impl ComposeQuery {
pub fn new() -> Self {
Self::default()
}
}
impl SingleRequest<ComposeListPage, Vec<Compose>> for ComposeQuery {
fn method(&self) -> RequestMethod {
RequestMethod::GET
}
fn path(&self) -> Result<String, QueryError> {
Ok(String::from("/composes/"))
}
fn parse(&self, string: &str) -> Result<ComposeListPage, QueryError> {
let page: ComposeListPage = serde_json::from_str(string)?;
Ok(page)
}
fn extract(&self, page: ComposeListPage) -> Vec<Compose> {
page.composes
}
}