use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq)]
#[allow(clippy::module_name_repetitions)]
pub struct Meta<'a> {
pub app_id: &'a str,
pub app_name: &'a str,
pub author_id: &'a str,
pub author_name: &'a str,
pub launcher: bool,
pub sudo: bool,
pub version: u32,
}
impl<'a> Meta<'a> {
pub fn decode(s: &'a [u8]) -> Result<Self, postcard::Error> {
postcard::from_bytes(s)
}
pub fn encode<'b>(&self, buf: &'b mut [u8]) -> Result<&'b mut [u8], postcard::Error> {
postcard::to_slice(self, buf)
}
#[must_use]
#[allow(clippy::missing_panics_doc)]
pub fn size(&self) -> usize {
let flavor = postcard::ser_flavors::Size::default();
postcard::serialize_with_flavor(self, flavor).unwrap()
}
}
#[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq)]
#[allow(clippy::module_name_repetitions)]
pub struct ShortMeta<'a> {
pub app_id: &'a str,
pub author_id: &'a str,
}
impl<'a> ShortMeta<'a> {
pub fn decode(s: &'a [u8]) -> Result<Self, postcard::Error> {
postcard::from_bytes(s)
}
pub fn encode<'b>(&self, buf: &'b mut [u8]) -> Result<&'b mut [u8], postcard::Error> {
postcard::to_slice(self, buf)
}
#[must_use]
#[allow(clippy::missing_panics_doc)]
pub fn size(&self) -> usize {
let flavor = postcard::ser_flavors::Size::default();
postcard::serialize_with_flavor(self, flavor).unwrap()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_roundtrip() {
let given = Meta {
app_id: "some-app-id",
app_name: "Some App Name",
author_id: "some-author-id",
author_name: "Some Author Name",
launcher: false,
sudo: false,
version: 12,
};
let mut buf = vec![0; given.size()];
let raw = given.encode(&mut buf).unwrap();
let actual = Meta::decode(raw).unwrap();
assert_eq!(given, actual);
}
}