read_value()/write_value(): put behind feature postcard-values

master
Astro 2020-12-11 19:13:00 +01:00
parent fb28e8a9b1
commit 532ba8381f
4 changed files with 18 additions and 3 deletions

View File

@ -11,7 +11,11 @@ categories = ["embedded", "database"]
license = "GPL-3" license = "GPL-3"
edition = "2018" edition = "2018"
[features]
default = ["postcard-values"]
postcard-values = ["postcard", "serde"]
[dependencies] [dependencies]
byteorder = { version = "1", default-features = false } byteorder = { version = "1", default-features = false }
serde = { version = "1.0", default-features = false } serde = { version = "1.0", default-features = false, optional = true }
postcard = "0.5" postcard = { version = "0.5", optional = true }

View File

@ -4,7 +4,9 @@ use core::{fmt, str};
pub enum Error<B> { pub enum Error<B> {
Read(ReadError), Read(ReadError),
Write(WriteError<B>), Write(WriteError<B>),
#[cfg(feature = "postcard-values")]
Encode(postcard::Error), Encode(postcard::Error),
#[cfg(feature = "postcard-values")]
Decode(postcard::Error), Decode(postcard::Error),
} }

View File

@ -2,6 +2,7 @@
use core::{mem::size_of, str}; use core::{mem::size_of, str};
use byteorder::{ByteOrder, BigEndian}; use byteorder::{ByteOrder, BigEndian};
#[cfg(feature = "postcard-values")]
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
mod error; mod error;
@ -59,10 +60,12 @@ impl<B: StoreBackend> Store<B> {
.map(|value| str::from_utf8(value) .map(|value| str::from_utf8(value)
.map_err(ReadError::Utf8Error) .map_err(ReadError::Utf8Error)
) )
.transpose()) .transpose()
)
} }
/// read from `key`, decode with `postcard` /// read from `key`, decode with `postcard`
#[cfg(feature = "postcard-values")]
pub fn read_value<'a, T: Deserialize<'a>>(&'a self, key: &str) -> Result<Option<T>, Error<B::Error>> { pub fn read_value<'a, T: Deserialize<'a>>(&'a self, key: &str) -> Result<Option<T>, Error<B::Error>> {
self.read(key)? self.read(key)?
.map( .map(
@ -159,6 +162,7 @@ impl<B: StoreBackend> Store<B> {
} }
/// encode with `postcard`, write at `key` /// encode with `postcard`, write at `key`
#[cfg(feature = "postcard-values")]
pub fn write_value<T: Serialize>(&mut self, key: &str, value: T) -> Result<(), Error<B::Error>> { pub fn write_value<T: Serialize>(&mut self, key: &str, value: T) -> Result<(), Error<B::Error>> {
let mut buf = [0; 64]; let mut buf = [0; 64];
let data = postcard::to_slice(&value, &mut buf) let data = postcard::to_slice(&value, &mut buf)

View File

@ -74,6 +74,7 @@ fn write_read_str_utf8() {
} }
#[test] #[test]
#[cfg(feature = "postcard-values")]
fn write_read_value_str() { fn write_read_value_str() {
let mut store = make_store(); let mut store = make_store();
store.write_value("foo", "bar").unwrap(); store.write_value("foo", "bar").unwrap();
@ -81,6 +82,7 @@ fn write_read_value_str() {
} }
#[test] #[test]
#[cfg(feature = "postcard-values")]
fn write_read_value_u32() { fn write_read_value_u32() {
let mut store = make_store(); let mut store = make_store();
store.write_value("foo", 42005u32).unwrap(); store.write_value("foo", 42005u32).unwrap();
@ -88,6 +90,7 @@ fn write_read_value_u32() {
} }
#[test] #[test]
#[cfg(feature = "postcard-values")]
fn write_read_value_i64() { fn write_read_value_i64() {
let mut store = make_store(); let mut store = make_store();
store.write_value("foo", -99999999i64).unwrap(); store.write_value("foo", -99999999i64).unwrap();
@ -95,6 +98,7 @@ fn write_read_value_i64() {
} }
#[test] #[test]
#[cfg(feature = "postcard-values")]
fn write_read_value_f32() { fn write_read_value_f32() {
let mut store = make_store(); let mut store = make_store();
store.write_value("foo", 3.75e17f32).unwrap(); store.write_value("foo", 3.75e17f32).unwrap();
@ -102,6 +106,7 @@ fn write_read_value_f32() {
} }
#[test] #[test]
#[cfg(feature = "postcard-values")]
fn write_read_value_f64() { fn write_read_value_f64() {
let mut store = make_store(); let mut store = make_store();
store.write_value("foo", -1.999e-13f64).unwrap(); store.write_value("foo", -1.999e-13f64).unwrap();