vika 0.1.2

A Rust API for Vika.
Documentation
use serde::{Deserialize, Serialize};

use crate::{common::http::ResponseSchema, datasheet::DatasheetsManager, node::NodesManager};

#[derive(Debug, Serialize, Deserialize)]
pub struct Space {
    // id of the space
    pub id: String,
    // name of the space
    pub name: String,
    //wether the user is the administrator of the space
    #[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?;
        // dbg!("{:#?}",&resp);
        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,
}