# 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