From 2eefedf15a92a54127564f2e7bbfa4ec97ae5e9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sosth=C3=A8ne=20Gu=C3=A9don?= Date: Tue, 1 Aug 2023 10:54:43 +0200 Subject: [PATCH] Add tests from #1 --- Cargo.toml | 4 ++-- tests/basics.rs | 45 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 16bfd3b..ee4b259 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,7 +21,7 @@ syn = "1.0" [dev-dependencies] heapless = { version = "0.7.16", default-features = false, features = ["serde"] } hex-literal = "0.4.1" -serde = { version = "1", default-features = false } +serde = { version = "1" } serde-byte-array = "0.1.2" serde_bytes = { version = "0.11.12", default-features = false } -serde_cbor = { version = "0.11.0", default-features = false } +serde_cbor = { version = "0.11.0" } diff --git a/tests/basics.rs b/tests/basics.rs index bac343e..33b04f4 100644 --- a/tests/basics.rs +++ b/tests/basics.rs @@ -220,3 +220,48 @@ mod some_keys { assert_eq!(maybe_example, example); } } + +mod cow { + use super::*; + use std::borrow::Cow; + + #[derive(PartialEq, Debug, SerializeIndexed, DeserializeIndexed)] + #[serde_indexed(offset = 1)] + struct WithLifetimes<'a> { + data: Cow<'a, [u8]>, + #[serde(skip_serializing_if = "Option::is_none")] + option: Option, + } + + fn lifetime_example<'a>() -> WithLifetimes<'a> { + WithLifetimes { + data: Cow::Borrowed(&[1, 2, 3]), + option: None, + } + } + + const SERIALIZED_LIFETIME_EXAMPLE: &'static [u8] = b"\xa1\x01\x83\x01\x02\x03"; + + #[test] + fn serialize() { + let data = lifetime_example(); + let mut buf = [0u8; 64]; + + let size = cbor_serialize(&data, &mut buf).unwrap(); + + assert_eq!(&buf[..size], SERIALIZED_LIFETIME_EXAMPLE); + } + + #[test] + fn deserialize() { + let example = lifetime_example(); + + let deserialized: WithLifetimes<'_> = + cbor_deserialize_with_scratch(SERIALIZED_LIFETIME_EXAMPLE, &mut []).unwrap(); + + assert_eq!(deserialized, example); + let Cow::Owned(_) = deserialized.data else { + panic!("Expected deserialized data Cow::Owned"); + }; + } +}