use serde::{Deserialize, Serialize};
use crate::{common::http::ResponseSchema, datasheet::DatasheetsManager, node::NodesManager};
#[derive(Debug, Serialize, Deserialize)]
pub struct Space {
pub id: String,
pub name: String,
#[serde(rename = "isAdmin")]
pub is_admin: bool,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct SpacesRespSchema {
pub spaces: Vec<Space>,
}
#[derive(Debug)]
pub struct SpacesManager {
config: crate::api::Config,
}
impl SpacesManager {
pub fn new(config: crate::api::Config) -> SpacesManager {
SpacesManager { config }
}
pub async fn query_all(&self) -> anyhow::Result<Vec<Space>> {
let url = format!("{}/spaces", self.config.get_url());
let client = reqwest::Client::new();
let resp = client
.get(&url)
.headers(self.config.clone().into())
.send()
.await?
.json::<ResponseSchema<SpacesRespSchema>>()
.await?;
match resp.code {
200 => anyhow::Ok(resp.data.unwrap().spaces),
_ => Err(anyhow::Error::msg(format!(
"code: {}, success: {}, message: {}, request_url: {}",
resp.code, resp.success, resp.message, url
))),
}
}
pub fn space(&self, space_id: &str) -> SpaceManager {
SpaceManager {
space_id: space_id.into(),
nodes: NodesManager {
space_id: space_id.into(),
config: self.config.clone(),
},
datasheets: DatasheetsManager {
space_id: space_id.into(),
config: self.config.clone(),
},
}
}
}
#[allow(dead_code)]
pub struct SpaceManager {
space_id: String,
pub nodes: NodesManager,
pub datasheets: DatasheetsManager,
}