rusty_vault 0.2.1

RustyVault is a powerful identity-based secrets management software, providing features such as cryptographic key management, encryption as a service, public key cryptography, certificates management, identity credentials management and so forth. RustyVault's RESTful API is designed to be fully compatible with Hashicorp Vault.
Documentation
use derive_more::Deref;
use serde_json::{Map, Value};

use super::{Client, HttpResponse};

use crate::{
    errors::RvError,
};

#[derive(Deref)]
pub struct Logical<'a> {
    #[deref]
    pub client: &'a Client,
}

impl Client {
    pub fn logical(&self) -> Logical {
        Logical {
            client: self
        }
    }
}

impl Logical<'_> {
    pub fn read(&self, path: &str) -> Result<HttpResponse, RvError> {
        self.request_read(&format!("/v1/{}", path))
    }

    pub fn write(&self, path: &str, data: Option<Map<String, Value>>) -> Result<HttpResponse, RvError> {
        self.request_write(&format!("/v1/{}", path), data)
    }

    pub fn list(&self, path: &str) -> Result<HttpResponse, RvError> {
        let mut ret = self.request_list(&format!("/v1/{}", path))?;
        if ret.response_status != 200 || ret.response_data.is_none() {
            return Ok(ret);
        }

        let data = ret.response_data.unwrap();
        ret.response_data = Some(data["data"].clone());

        Ok(ret)
    }

    pub fn delete(&self, path: &str, data: Option<Map<String, Value>>) -> Result<HttpResponse, RvError> {
        self.request_delete(&format!("/v1/{}", path), data)
    }
}