use serde::{Deserialize, Serialize};
use crate::{common::{config::Config, http::ResponseSchema}, field::FieldsManager};
#[derive(Debug, Serialize, Deserialize)]
pub struct View {
pub id: String,
pub name: String,
pub r#type: ViewType,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct ViewRespSchema {
views: Vec<View>,
}
#[derive(Debug, Serialize, Deserialize)]
pub enum ViewType {
Grid,
Gallery,
Kanban,
Gantt,
Calendar,
Architecture,
}
impl std::fmt::Display for ViewType {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
ViewType::Grid => write!(f, "Grid"),
ViewType::Gallery => write!(f, "Gallery"),
ViewType::Kanban => write!(f, "Kanban"),
ViewType::Gantt => write!(f, "Gantt"),
ViewType::Calendar => write!(f, "Calendar"),
ViewType::Architecture => write!(f, "Architecture"),
}
}
}
pub struct ViewsManager {
pub datasheet_id: String,
pub config: Config,
}
impl ViewsManager {
pub async fn query_all(&self) -> anyhow::Result<Vec<View>> {
let url = format!(
"{}/datasheets/{}/views",
self.config.get_url(),
self.datasheet_id
);
let client = reqwest::Client::new();
let resp = client
.get(&url)
.headers(self.config.clone().into())
.send()
.await?
.json::<ResponseSchema<ViewRespSchema>>()
.await?;
match resp.code {
200 => anyhow::Ok(resp.data.unwrap().views),
_ => Err(anyhow::Error::msg(format!(
"code: {}, success: {}, message: {}, request_url: {}",
resp.code, resp.success, resp.message, url
))),
}
}
}
pub struct ViewManager {
pub space_id: String,
pub datasheet_id: String,
pub view_id: String,
pub fields: FieldsManager,
pub config: Config,
}