Encoders and decoders for STUN (RFC 5389) and its extensions.
```rust use bytecodec::{DecodeExt, EncodeExt, Error}; use stuncodec::{Message, MessageClass, MessageDecoder, MessageEncoder, TransactionId}; use stuncodec::rfc5389::{attributes::Software, methods::BINDING, Attribute};
// Creates a message let mut message = Message::new(MessageClass::Request, BINDING, TransactionId::new([3; 12])); message.addattribute(Attribute::Software(Software::new("foo".toowned())?));
// Encodes the message let mut encoder = MessageEncoder::new(); let bytes = encoder.encodeintobytes(message.clone())?; assert_eq!( bytes, [ 0, 1, 0, 8, 33, 18, 164, 66, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 128, 34, 0, 3, 102, 111, 111, 0 ] );
// Decodes the message
let mut decoder = MessageDecoder::