//! Integration tests of the `derive(PactCodec)` macro. use pact::codec::{Decodable, WritesEncodable}; use pact_derive::PactCodec; /// Struct containing all known Pact primitive datatypes. #[derive(Debug, PartialEq, Default, PactCodec)] pub struct AllPrimitives { bool_field: bool, i8_field: i8, i16_field: i16, i32_field: i32, i64_field: i64, u8_field: u8, u16_field: u16, u32_field: u32, u64_field: u64, f32_field: f32, f64_field: f64, str_field: String, vec_field: Vec, opt_field: Option, } /// Struct containing nested Pact-codeable datatypes. #[derive(Debug, PartialEq, Default, PactCodec)] pub struct NestedPrimitives { nested_field: AllPrimitives, nested_vec_field: Vec, } /// Test that encodes and decodes /// an [AllPrimitives] to Pact data. #[test] fn test_all_primitives_encoding() { let original = AllPrimitives { bool_field: true, i8_field: -128, i16_field: -32768, i32_field: -2147483648, i64_field: -9223372036854775808, u8_field: 255, u16_field: 65535, u32_field: 4294967295, u64_field: 18446744073709551615, f32_field: 3.4028234663852886e+38, f64_field: 1.7976931348623157e+308, str_field: "hello".to_string(), vec_field: vec!["a".to_string(), "b".to_string()], opt_field: Some(-9223372036854775808), }; let mut encoded = vec![]; encoded.write_data(&original).unwrap(); let decoded = AllPrimitives::decode_from(&mut encoded.as_slice()).unwrap(); assert_eq!(original, decoded); } /// Test that encodes and decodes /// an [NestedPrimitives] to Pact data. #[test] fn test_nested_primitives_encoding() { let original = NestedPrimitives { nested_field: AllPrimitives { bool_field: false, i8_field: 127, i16_field: 32767, i32_field: 2147483647, i64_field: 9223372036854775807, u8_field: 0, u16_field: 0, u32_field: 0, u64_field: 0, f32_field: -3.4028234663852886e+38, f64_field: -1.7976931348623157e+308, str_field: "".to_string(), vec_field: Vec::new(), opt_field: None, }, nested_vec_field: vec![ AllPrimitives::default(), AllPrimitives { bool_field: true, ..Default::default() }, ], }; let mut encoded = vec![]; encoded.write_data(&original).unwrap(); let decoded = NestedPrimitives::decode_from(&mut encoded.as_slice()).unwrap(); assert_eq!(original, decoded); }