vika_community 0.1.2

rust for vika api.
Documentation
use super::{
    Config, GetRecordsReq, GetRecordsResp, PatchRecordsReq, PatchRecordsResp, PostRecordsReq,
    PostRecordsResp, Response, BaseResponse
};
use reqwest::blocking::Client;
use reqwest::header::{AUTHORIZATION, CONTENT_TYPE};

pub struct RecordsManager {
    pub config: Config,

    pub space_id: String,

    pub datasheet_id: String,
}

impl RecordsManager {
    pub fn query(&self, req: GetRecordsReq) -> Option<GetRecordsResp> {
        let config: Config = self.config.clone();
        let url = format!(
            "{}://{}/fusion/{}/datasheets/{}/records",
            &config.protocol, &config.host, &config.version, &self.datasheet_id
        );
        let client = Client::new();
        let parameters = &req.to_parameter_vec();
        let body = client
            .get(url)
            .query(parameters)
            .header(AUTHORIZATION, config.token.clone())
            .send()
            .unwrap()
            .text()
            .unwrap();
        let resp: Response<GetRecordsResp> = serde_json::from_str(&body).unwrap();
        if resp.code == 200 {
            Some(resp.data)
        } else {
            None
        }
    }

    pub fn post(&self, records: PostRecordsReq) -> Option<PostRecordsResp> {
        let config: Config = self.config.clone();
        let url = format!(
            "{}://{}/fusion/{}/datasheets/{}/records",
            &config.protocol, &config.host, &config.version, &self.datasheet_id
        );
        let client = Client::new();
        let body = client
            .post(url)
            .header(AUTHORIZATION, config.token.clone())
            .header(CONTENT_TYPE, String::from("application/json"))
            .body(records.to_json_string())
            .send()
            .unwrap()
            .text()
            .unwrap();
        let resp: Response<PostRecordsResp> = serde_json::from_str(&body).unwrap();
        if resp.code == 200 {
            Some(resp.data)
        } else {
            None
        }
    }

    pub fn patch(&self, records: PatchRecordsReq) -> Option<PatchRecordsResp> {
        let config: Config = self.config.clone();
        let url = format!(
            "{}://{}/fusion/{}/datasheets/{}/records",
            &config.protocol, &config.host, &config.version, &self.datasheet_id
        );
        let client = Client::new();
        let body = client
            .patch(url)
            .header(AUTHORIZATION, config.token.clone())
            .header(CONTENT_TYPE, String::from("application/json"))
            .body(records.to_json_string())
            .send()
            .unwrap()
            .text()
            .unwrap();
        let resp: Response<PatchRecordsResp> = serde_json::from_str(&body).unwrap();
        if resp.code == 200 {
            Some(resp.data)
        } else {
            None
        }
    }

    pub fn delete(&self, record_ids: Vec<String>) -> Option<bool> {
        let mut values: Vec<(String, String)> = Vec::new();
        for record_id in record_ids {
            values.push(("recordIds".to_string(), record_id));
        }
        let config: Config = self.config.clone();
        let url = format!(
            "{}://{}/fusion/{}/datasheets/{}/records",
            &config.protocol, &config.host, &config.version, &self.datasheet_id
        );
        let client = Client::new();
        let resp_body = client
            .delete(url)
            .header(AUTHORIZATION, config.token.clone())
            .header(CONTENT_TYPE, String::from("application/json"))
            .query(&values)
            .send()
            .unwrap()
            .text()
            .unwrap();
        let resp: BaseResponse = serde_json::from_str(&resp_body).unwrap();
        if resp.code == 200 {
            Some(true)
        } else {
            None
        }
    }
}