Swift AMF Encoder/Decoder, using Codable.

This is an incomplete/WIP Swift implementation of Action Message Format Encoding and Decoding. Originally built for use in a Swift RTMP implementation in the video broadcast space.
Making AMF parse into Swift Codable objects/structs is quite limiting, inside the confines of the Swift type system and how custom Codable Encoder/Decoders needs to be written to work. It is almost impossible not to loose information/order when encoding in and out of AMF.
A good example of Decoding working (for AMF0) is found in the testAMFObject()
test inside the AMF0DecodingTests
, which uses real AMF0 in an RTMP situation. Round trip tests demonstrate encoding too.
This implementation will get more battled/performance tested once deployed with an RTMP implementation.
Currently running at an OK >60% coverage
TODO:
Both
AMF0
AMF3
THANKS!
Massive thanks to @mattt for his Flight School Guide to Swift Codable, specifically his MessagePack implementation and DIY Codable Encoder / Decoder Kit both of which were invaluable in understanding how to write a custom Codable Encoder/Decoder and to the existing (but rather dated) CocoaAMF for getting my head around AMF (especially AMF3 - which is totally nutty - with it’s proprietary Unsigned29Int that itself is bit shifted all over the place).
Swift AMF Encoder/Decoder, using Codable.
This is an incomplete/WIP Swift implementation of Action Message Format Encoding and Decoding. Originally built for use in a Swift RTMP implementation in the video broadcast space.
Making AMF parse into Swift Codable objects/structs is quite limiting, inside the confines of the Swift type system and how custom Codable Encoder/Decoders needs to be written to work. It is almost impossible not to loose information/order when encoding in and out of AMF.
A good example of Decoding working (for AMF0) is found in the
testAMFObject()
test inside theAMF0DecodingTests
, which uses real AMF0 in an RTMP situation. Round trip tests demonstrate encoding too.This implementation will get more battled/performance tested once deployed with an RTMP implementation.
Currently running at an OK >60% coverage
TODO:
Both
lazy var
s to bubble upthrows
a bit betterAMF0
AMF3
THANKS!
Massive thanks to @mattt for his Flight School Guide to Swift Codable, specifically his MessagePack implementation and DIY Codable Encoder / Decoder Kit both of which were invaluable in understanding how to write a custom Codable Encoder/Decoder and to the existing (but rather dated) CocoaAMF for getting my head around AMF (especially AMF3 - which is totally nutty - with it’s proprietary Unsigned29Int that itself is bit shifted all over the place).