use super::{Space, SpaceAccess};
use crate::framework::endpoint::{HerokuEndpoint, Method};
pub struct SpaceUpdate<'a> {
pub space_id: &'a str,
pub params: SpaceUpdateParams<'a>,
}
#[cfg(feature = "builder")]
impl<'a> SpaceUpdate<'a> {
pub fn new(space_id: &'a str) -> SpaceUpdate<'a> {
SpaceUpdate {
space_id,
params: SpaceUpdateParams { name: None },
}
}
pub fn name(&mut self, _name: &'a str) -> &mut Self {
self.params.name = Some(_name);
self
}
pub fn build(&self) -> SpaceUpdate<'a> {
SpaceUpdate {
space_id: self.space_id,
params: SpaceUpdateParams {
name: self.params.name,
},
}
}
}
#[serde_with::skip_serializing_none]
#[derive(Serialize, Clone, Debug)]
pub struct SpaceUpdateParams<'a> {
pub name: Option<&'a str>,
}
impl<'a> HerokuEndpoint<Space, (), SpaceUpdateParams<'a>> for SpaceUpdate<'a> {
fn method(&self) -> Method {
Method::Patch
}
fn path(&self) -> String {
format!("spaces/{}", self.space_id)
}
fn body(&self) -> Option<SpaceUpdateParams<'a>> {
Some(self.params.clone())
}
}
pub struct SpaceAccessUpdate<'a> {
pub space_id: &'a str,
pub account_id: &'a str,
pub params: SpaceAccessUpdateParams<'a>,
}
#[cfg(feature = "builder")]
impl<'a> SpaceAccessUpdate<'a> {
pub fn new(space_id: &'a str, account_id: &'a str, _name: &'a str) -> SpaceAccessUpdate<'a> {
SpaceAccessUpdate {
space_id,
account_id,
params: SpaceAccessUpdateParams {
permissions: vec![Permissions { name: _name }],
},
}
}
}
#[derive(Serialize, Clone, Debug)]
pub struct SpaceAccessUpdateParams<'a> {
pub permissions: Vec<Permissions<'a>>,
}
#[derive(Serialize, Clone, Debug)]
pub struct Permissions<'a> {
pub name: &'a str,
}
impl<'a> HerokuEndpoint<SpaceAccess, (), SpaceAccessUpdateParams<'a>> for SpaceAccessUpdate<'a> {
fn method(&self) -> Method {
Method::Patch
}
fn path(&self) -> String {
format!("spaces/{}/members/{}", self.space_id, self.account_id)
}
fn body(&self) -> Option<SpaceAccessUpdateParams<'a>> {
Some(self.params.clone())
}
}