rainmaker-components 0.1.0

Component abstractions for rainmaker
Documentation
#![cfg(target_os = "espidf")]

use super::base::*;
use crate::error::Error;
use esp_idf_svc::nvs::{EspCustomNvsPartition, EspNvs, NvsCustom};

impl NvsPartition<EspCustomNvsPartition> {
    pub fn new(partition_name: &str) -> Result<Self, Error> {
        let partition = EspCustomNvsPartition::take(partition_name)?;
        Ok(Self(partition))
    }
}

impl Nvs<EspNvs<NvsCustom>> {
    pub fn new(
        partition: NvsPartition<EspCustomNvsPartition>,
        namespace: &str,
    ) -> Result<Self, Error> {
        Ok(Self(EspNvs::new(partition.0, namespace, true)?))
    }

    pub fn remove(&mut self, key: &str) -> Result<bool, Error> {
        Ok(self.0.remove(key)?)
    }

    pub fn set_u8(&mut self, name: &str, data: u8) -> Result<(), Error> {
        self.0.set_u8(name, data)?;
        Ok(())
    }

    pub fn set_bytes(&mut self, name: &str, bytes: &[u8]) -> Result<(), Error> {
        self.0.set_blob(name, bytes)?;
        Ok(())
    }

    pub fn set_str(&mut self, name: &str, val: &str) -> Result<(), Error> {
        self.0.set_str(name, val)?;
        Ok(())
    }

    pub fn get_u8(&self, key: &str) -> Result<Option<u8>, Error> {
        self.0.get_u8(key).map_err(|x| x.into())
    }

    pub fn get_bytes(&self, name: &str, buff: &mut [u8]) -> Result<Option<Vec<u8>>, Error> {
        let ret = self.0.get_blob(name, buff)?;
        Ok(ret.map(|x| x.to_vec()))
    }

    pub fn get_string(&self, name: &str, buff: &mut [u8]) -> Result<Option<String>, Error> {
        let ret = self.0.get_str(name, buff)?;
        Ok(ret.map(|x| x.to_string()))
    }
}