MessagePack is an efficient binary serialization format. It lets you exchange data among multiple languages like JSON. But it's faster and smaller. Small integers are encoded into a single byte, and typical short strings require only one extra byte in addition to the strings themselves.
.package(url:"https://github.com/swiftstack/messagepack.git",.branch("dev"))publicenumMessagePack{case `nil`
case int(Int)case uint(UInt)case bool(Bool)case float(Float)case double(Double)case string(String)case binary([UInt8])case array([MessagePack])case map([MessagePack:MessagePack])case extended(Extended)publicstructExtended{publiclettype:Int8publicletdata:[UInt8]publicinit(type:Int8, data:[UInt8]){self.type = type
self.data = data
}}}You can find this code and more in examples.
lethey=MessagePack("hey there!")letbytes=tryMessagePack.encode(hey)letoriginal=String(tryMessagePack.decode(bytes: bytes))lethey=MessagePack("hey there!")letstream=BufferedStream(stream:NetworkStream(socket: client))tryMessagePack.encode(hey, to: stream)try stream.flush()letoriginal=String(tryMessagePack.decode(from: stream))letoutput=OutputByteStream()varencoder=MessagePackWriter(output)try encoder.encode("one")try encoder.encode(2)try encoder.encode(3.0)letencoded= output.bytes
vardecoder=MessagePackReader(InputByteStream(encoded))letstring=try decoder.decode(String.self)letint=try decoder.decode(UInt8.self)letdouble=try decoder.decode(Double.self)print("decoded manually: \(string), \(int), \(double)")