1*9860b763SAndroid Build Coastguard Worker // Copyright 2022, The Android Open Source Project
2*9860b763SAndroid Build Coastguard Worker //
3*9860b763SAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License");
4*9860b763SAndroid Build Coastguard Worker // you may not use this file except in compliance with the License.
5*9860b763SAndroid Build Coastguard Worker // You may obtain a copy of the License at
6*9860b763SAndroid Build Coastguard Worker //
7*9860b763SAndroid Build Coastguard Worker // http://www.apache.org/licenses/LICENSE-2.0
8*9860b763SAndroid Build Coastguard Worker //
9*9860b763SAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
10*9860b763SAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS,
11*9860b763SAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*9860b763SAndroid Build Coastguard Worker // See the License for the specific language governing permissions and
13*9860b763SAndroid Build Coastguard Worker // limitations under the License.
14*9860b763SAndroid Build Coastguard Worker
15*9860b763SAndroid Build Coastguard Worker use kmr_derive::AsCborValue;
16*9860b763SAndroid Build Coastguard Worker use kmr_wire::{cbor_type_error, AsCborValue, CborError};
17*9860b763SAndroid Build Coastguard Worker
18*9860b763SAndroid Build Coastguard Worker #[derive(Clone, Debug, PartialEq, Eq, AsCborValue)]
19*9860b763SAndroid Build Coastguard Worker struct NamedFields {
20*9860b763SAndroid Build Coastguard Worker i: i32,
21*9860b763SAndroid Build Coastguard Worker s: String,
22*9860b763SAndroid Build Coastguard Worker }
23*9860b763SAndroid Build Coastguard Worker
24*9860b763SAndroid Build Coastguard Worker #[test]
test_derive_named_struct_roundtrip()25*9860b763SAndroid Build Coastguard Worker fn test_derive_named_struct_roundtrip() {
26*9860b763SAndroid Build Coastguard Worker let want = NamedFields { i: 42, s: "a string".to_string() };
27*9860b763SAndroid Build Coastguard Worker let want_value = want.clone().to_cbor_value().unwrap();
28*9860b763SAndroid Build Coastguard Worker let got = NamedFields::from_cbor_value(want_value).unwrap();
29*9860b763SAndroid Build Coastguard Worker assert_eq!(want, got);
30*9860b763SAndroid Build Coastguard Worker assert_eq!(NamedFields::cddl_typename().unwrap(), "NamedFields");
31*9860b763SAndroid Build Coastguard Worker assert_eq!(NamedFields::cddl_schema().unwrap(), "[\n i: int,\n s: tstr,\n]");
32*9860b763SAndroid Build Coastguard Worker }
33*9860b763SAndroid Build Coastguard Worker
34*9860b763SAndroid Build Coastguard Worker #[derive(Clone, Debug, PartialEq, Eq, AsCborValue)]
35*9860b763SAndroid Build Coastguard Worker struct UnnamedFields(i32, String);
36*9860b763SAndroid Build Coastguard Worker
37*9860b763SAndroid Build Coastguard Worker #[test]
test_derive_unnamed_struct_roundtrip()38*9860b763SAndroid Build Coastguard Worker fn test_derive_unnamed_struct_roundtrip() {
39*9860b763SAndroid Build Coastguard Worker let want = UnnamedFields(42, "a string".to_string());
40*9860b763SAndroid Build Coastguard Worker let want_value = want.clone().to_cbor_value().unwrap();
41*9860b763SAndroid Build Coastguard Worker let got = UnnamedFields::from_cbor_value(want_value).unwrap();
42*9860b763SAndroid Build Coastguard Worker assert_eq!(want, got);
43*9860b763SAndroid Build Coastguard Worker assert_eq!(UnnamedFields::cddl_typename().unwrap(), "UnnamedFields");
44*9860b763SAndroid Build Coastguard Worker assert_eq!(UnnamedFields::cddl_schema().unwrap(), "[\n int,\n tstr,\n]");
45*9860b763SAndroid Build Coastguard Worker }
46*9860b763SAndroid Build Coastguard Worker
47*9860b763SAndroid Build Coastguard Worker #[derive(Clone, Debug, PartialEq, Eq, AsCborValue)]
48*9860b763SAndroid Build Coastguard Worker enum NumericEnum {
49*9860b763SAndroid Build Coastguard Worker One = 1,
50*9860b763SAndroid Build Coastguard Worker Two = 2,
51*9860b763SAndroid Build Coastguard Worker Three = 3,
52*9860b763SAndroid Build Coastguard Worker }
53*9860b763SAndroid Build Coastguard Worker
54*9860b763SAndroid Build Coastguard Worker #[test]
test_derive_numeric_enum_roundtrip()55*9860b763SAndroid Build Coastguard Worker fn test_derive_numeric_enum_roundtrip() {
56*9860b763SAndroid Build Coastguard Worker let want = NumericEnum::Two;
57*9860b763SAndroid Build Coastguard Worker let want_value = want.clone().to_cbor_value().unwrap();
58*9860b763SAndroid Build Coastguard Worker let got = NumericEnum::from_cbor_value(want_value).unwrap();
59*9860b763SAndroid Build Coastguard Worker assert_eq!(want, got);
60*9860b763SAndroid Build Coastguard Worker assert_eq!(NumericEnum::cddl_typename().unwrap(), "NumericEnum");
61*9860b763SAndroid Build Coastguard Worker assert_eq!(
62*9860b763SAndroid Build Coastguard Worker NumericEnum::cddl_schema().unwrap(),
63*9860b763SAndroid Build Coastguard Worker "&(\n NumericEnum_One: 1,\n NumericEnum_Two: 2,\n NumericEnum_Three: 3,\n)"
64*9860b763SAndroid Build Coastguard Worker );
65*9860b763SAndroid Build Coastguard Worker }
66