Comments (4)
Hello, no I believe it's a bug. I'm currently working on fixing it.
from rasn.
This should be fixed on the latest main
. Feel free to re-open if you have a case that fails.
from rasn.
Reopening (don't think I can actually reopen the issue though) because I ran into a case that will encode properly, but can't decode.
use rasn::{types::*, *};
#[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 {
#[rasn(tag(0))]
pub message_id: rasn::types::Integer,
#[rasn(tag(1))]
pub message_num: Option<rasn::types::Integer>,
#[rasn(tag(2))]
pub message_status: MessageStatus,
}
#[derive(AsnType, Decode, Encode, Debug, PartialEq, Clone)]
pub struct MessageStatus {
#[rasn(tag(0))]
#[rasn(choice)]
pub message_class: MessageClass,
#[rasn(tag(1))]
pub status_id: Option<rasn::types::Integer>,
#[rasn(tag(2))]
#[rasn(choice)]
pub status_enum: Option<MessageEnum>,
}
#[derive(AsnType, Decode, Encode, Debug, PartialEq, Clone)]
#[rasn(choice)]
pub enum MessageClass {
#[rasn(tag(0))]
Test1(rasn::types::Integer),
#[rasn(tag(1))]
Test2(rasn::types::Integer),
}
#[derive(AsnType, Decode, Encode, Debug, PartialEq, Clone)]
#[rasn(choice)]
pub enum MessageEnum {
#[rasn(tag(0))]
Hello(rasn::types::Integer),
#[rasn(tag(1))]
World(rasn::types::Integer),
#[rasn(tag(2))]
Test(rasn::types::Integer),
}
#[test]
fn it_works() {
let data = ProtocolMessages::Message(MessagePDU {
message_id: 0.into(),
message_num: None,
message_status: MessageStatus{
message_class: MessageClass::Test1(0.into()),
status_id: None,
status_enum: None,
}
});
let bin = rasn::ber::encode(&data).unwrap();
assert_eq!(data, rasn::ber::decode(&bin).unwrap());
}
from rasn.
Thank you for the test case! I'll work on fixing it. By the way, if you are interested I would be open to adding IEC standards (ie rasn-iec61850
) crates under standards
like SNMP. This would be shared on crates.io under Apache / MIT for everyone, and can be part of test suite to make sure it always passes.
from rasn.
Related Issues (20)
- Traits for macro expansion not always correctly carried with generics when using Encode/Decode HOT 2
- Prettyprint for Errors HOT 3
- Unable to round-trip with APER HOT 9
- Unable to round-trip NumericString with APER HOT 1
- Proc macro should error on unknown attributes
- Getting default value of type not currently possible when implementing codec HOT 5
- Question about DER encoding discrepancy between versions (0.7 -> 0.8) HOT 1
- Incorrect DER Encoding Order of SET OF Type HOT 1
- stack overflow when comparing &ObjectIdentifier with &[u32] HOT 1
- DER decoding of empty sequences is incredibly slow HOT 4
- UnbindRequest encodes/decodes incorrectly
- Comparing Object Identifier causes SIGSEGV HOT 2
- `index_map` and `character_map` are broken (one static map is initialized for all types, and thus doesn't work for different types)
- Breaking change in 0.12.6 breaks compilation of apple-codesign HOT 1
- Tokei lines of code badge doesn't work
- Mutable Access to Encoded Values HOT 2
- Performance of PER codec HOT 8
- Is it possible to get &[u8] for the underlying decoded value
- Standards crates (`rasn-pkix`, `rasn-ocsp`, etc.) should not enable `rasn`'s default feature HOT 2
- Failed windows builds HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from rasn.