vika 0.1.2

A Rust API for Vika.
Documentation
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,
}