use rasn::prelude::*;
#[derive(AsnType, Decode, Encode, Debug, PartialEq, Clone)]
#[rasn(choice)]
pub enum ProtocolMessages {
#[rasn(tag(0))]
Message(MessagePDU),
}
#[derive(AsnType, Decode, Encode, Debug, PartialEq, Clone)]
pub struct MessagePDU {
message_id: rasn::types::Integer,
name_objects: NameObjects,
}
#[derive(AsnType, Decode, Encode, Debug, PartialEq, Clone)]
#[rasn(choice)]
enum NameObjects {
#[rasn(tag(0))]
TestObject(TestObject),
}
#[derive(AsnType, Decode, Encode, Debug, PartialEq, Clone)]
pub struct TestObject {
#[rasn(tag(0))]
nested_enum: NestedEnum,
}
#[derive(AsnType, Decode, Encode, Debug, PartialEq, Clone)]
#[rasn(choice)]
enum NestedEnum {
#[rasn(tag(0))]
NestObject(NestObject),
}
#[derive(AsnType, Decode, Encode, Debug, PartialEq, Clone)]
pub struct NestObject {
#[rasn(tag(0))]
nested_value: rasn::types::Integer,
}
#[test]
fn it_works() {
let data = ProtocolMessages::Message(MessagePDU {
message_id: 0.into(),
name_objects: NameObjects::TestObject(TestObject {
nested_enum: NestedEnum::NestObject(NestObject {
nested_value: 0.into(),
}),
}),
});
let bin = rasn::ber::encode(&data).unwrap();
println!("{bin:?}");
assert_eq!(data, rasn::ber::decode(&bin).unwrap());
}