21 个版本

0.3.5 2024 年 4 月 3 日
0.3.4 2023 年 10 月 23 日
0.3.3 2023 年 9 月 19 日
0.3.2 2023 年 6 月 5 日
0.1.10 2018 年 9 月 17 日

#93 in 编码

Download history • Rust 包仓库 11139/week @ 2024-04-28 • Rust 包仓库 13410/week @ 2024-05-05 • Rust 包仓库 14002/week @ 2024-05-12 • Rust 包仓库 12740/week @ 2024-05-19 • Rust 包仓库 10908/week @ 2024-05-26 • Rust 包仓库 13433/week @ 2024-06-02 • Rust 包仓库 15433/week @ 2024-06-09 • Rust 包仓库 16363/week @ 2024-06-16 • Rust 包仓库 14715/week @ 2024-06-23 • Rust 包仓库 17194/week @ 2024-06-30 • Rust 包仓库 19020/week @ 2024-07-07 • Rust 包仓库 15758/week @ 2024-07-14 • Rust 包仓库 20867/week @ 2024-07-21 • Rust 包仓库 15228/week @ 2024-07-28 • Rust 包仓库 18674/week @ 2024-08-04 • Rust 包仓库 15556/week @ 2024-08-11 • Rust 包仓库

71,271 个月下载量
11 仓库中使用 (直接使用 9 个)

MIT 许可证

175KB
3.5K SLoC

stun_codec

stun_codec Documentation Actions Status Coverage Status License: MIT

STUN (RFC 5389) 及其扩展的编码器和解码器。

文档

示例

use bytecodec::{DecodeExt, EncodeExt, Error};
use stun_codec::{Message, MessageClass, MessageDecoder, MessageEncoder, TransactionId};
use stun_codec::rfc5389::{attributes::Software, methods::BINDING, Attribute};

// Creates a message
let mut message = Message::new(MessageClass::Request, BINDING, TransactionId::new([3; 12]));
message.add_attribute(Attribute::Software(Software::new("foo".to_owned())?));

// Encodes the message
let mut encoder = MessageEncoder::new();
let bytes = encoder.encode_into_bytes(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::<Attribute>::new();
let decoded = decoder.decode_from_bytes(&bytes)?.map_err(Error::from)?;
assert_eq!(decoded.class(), message.class());
assert_eq!(decoded.method(), message.method());
assert_eq!(decoded.transaction_id(), message.transaction_id());
assert!(decoded.attributes().eq(message.attributes()));

参考

依赖

~2.5MB
~55K SLoC