use serde::{Deserialize, Serialize};
use crate::commands::macros::{
impl_deserialize_from_empty_map_and_into_unit, impl_serialize_as_empty_map,
};
#[derive(Clone, Debug, Serialize, Eq, PartialEq)]
pub struct ReadSetting<'a> {
pub name: &'a str,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_size: Option<u32>,
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq)]
pub struct ReadSettingResponse {
pub val: Vec<u8>,
pub max_size: Option<u32>,
}
#[derive(Clone, Debug, Serialize, Eq, PartialEq)]
pub struct WriteSetting<'a, 'b> {
pub name: &'a str,
#[serde(with = "serde_bytes")]
pub val: &'b [u8],
}
#[derive(Clone, Default, Debug, Eq, PartialEq)]
pub struct WriteSettingResponse;
impl_deserialize_from_empty_map_and_into_unit!(WriteSettingResponse);
#[derive(Clone, Debug, Serialize, Eq, PartialEq)]
pub struct DeleteSetting<'a> {
pub name: &'a str,
}
#[derive(Clone, Default, Debug, Eq, PartialEq)]
pub struct DeleteSettingResponse;
impl_deserialize_from_empty_map_and_into_unit!(DeleteSettingResponse);
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct CommitSettings;
impl_serialize_as_empty_map!(CommitSettings);
#[derive(Clone, Default, Debug, Eq, PartialEq)]
pub struct CommitSettingsResponse;
impl_deserialize_from_empty_map_and_into_unit!(CommitSettingsResponse);
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct LoadSettings;
impl_serialize_as_empty_map!(LoadSettings);
#[derive(Clone, Default, Debug, Eq, PartialEq)]
pub struct LoadSettingsResponse;
impl_deserialize_from_empty_map_and_into_unit!(LoadSettingsResponse);
#[derive(Clone, Debug, Serialize, Eq, PartialEq)]
pub struct SaveSettings<'a> {
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<&'a str>,
}
#[derive(Clone, Default, Debug, Eq, PartialEq)]
pub struct SaveSettingsResponse;
impl_deserialize_from_empty_map_and_into_unit!(SaveSettingsResponse);
#[cfg(test)]
mod tests {
use super::super::macros::command_encode_decode_test;
use super::*;
use ciborium::cbor;
command_encode_decode_test! {
read_setting,
(0, 3, 0),
ReadSetting {
name: "foo/bar",
max_size: None
},
cbor!({
"name" => "foo/bar",
}),
cbor!({
"val" => ciborium::Value::Bytes(vec![1,2,3,4,5]),
}),
ReadSettingResponse{
val: vec![1,2,3,4,5],
max_size: None,
},
}
command_encode_decode_test! {
read_setting_with_max_size,
(0, 3, 0),
ReadSetting {
name: "foo/bar",
max_size: Some(42),
},
cbor!({
"name" => "foo/bar",
"max_size" => 42,
}),
cbor!({
"val" => ciborium::Value::Bytes(vec![1,2,3,4,5]),
"max_size" => 36,
}),
ReadSettingResponse{
val: vec![1,2,3,4,5],
max_size: Some(36),
},
}
command_encode_decode_test! {
write_setting,
(2, 3, 0),
WriteSetting {
name: "foo",
val: &[1,2,3,4,5],
},
cbor!({
"name" => "foo",
"val" => ciborium::Value::Bytes(vec![1,2,3,4,5]),
}),
cbor!({}),
WriteSettingResponse,
}
command_encode_decode_test! {
delete_setting,
(2, 3, 1),
DeleteSetting {
name: "bar",
},
cbor!({
"name" => "bar",
}),
cbor!({}),
DeleteSettingResponse,
}
command_encode_decode_test! {
commit_settings,
(2, 3, 2),
CommitSettings,
cbor!({}),
cbor!({}),
CommitSettingsResponse,
}
command_encode_decode_test! {
load_settings,
(0, 3, 3),
LoadSettings,
cbor!({}),
cbor!({}),
LoadSettingsResponse,
}
command_encode_decode_test! {
save_settings,
(2, 3, 3),
SaveSettings{
name: None,
},
cbor!({}),
cbor!({}),
SaveSettingsResponse,
}
command_encode_decode_test! {
save_settings_with_name,
(2, 3, 3),
SaveSettings{
name: Some("foo"),
},
cbor!({
"name" => "foo",
}),
cbor!({}),
SaveSettingsResponse,
}
}