3 unstable releases
0.2.2 | Feb 3, 2022 |
---|---|
0.2.1 |
|
0.1.1 | Jan 29, 2022 |
0.1.0 | Jan 28, 2022 |
#35 in #valid
125KB
2.5K
SLoC
Mqtt message decoding/encoding library
This is a library designed to be used for creating mqtt clients or mqtt brokers. As many things as were reasonable are encoded in the type system, e.g.
- packets have their own types, except for PUBCOMP/PUBREC/PUBREL/PUBACK, since they are essentially the same
- reason codes are enums and it's not possible to build a packet with an invalid reason code
- properties are defined for every single packet type and therefore only valid property codes can be written into the packet
Supports: MQTTv3 and MQTTv5
Messages of these versions should be decodable/encodable with this library.
What works so far (Implemented and tested):
Encode | Decode | Packet Type |
---|---|---|
✅ | ✅ | Connect |
✅ | ✅ | Connack |
✅ | ✅ | Publish |
✅ | ✅ | Puback |
✅ | ✅ | Pubrec |
✅ | ✅ | Pubrel |
✅ | ✅ | Pubcomp |
✅ | ✅ | Subscribe |
✅ | ✅ | Suback |
✅ | ✅ | Unsubscribe |
✅ | ✅ | Unsuback |
✅ | ✅ | Pingreq |
✅ | ✅ | Pingresp |
✅ | ✅ | Disconnect |
✅ | ✅ | Auth |
However certain things still need to be added/improved:
- A better command building API?
- Make only necessary code public
- Support for Maximum Packet Size (MQTTv5). Should not send certain properties if they "bloat" the packet
- Ensure all properties have the correct Optionality set in their types
- Add some fuzzing tests to prevent unwanted panic! calls
- Improve documentation
Dependencies
~180KB