GlassGem is a Swift package that implements the Consistent Overhead Byte Stuffing (COBS) algorithm for encoding arbitrary data with single byte packet delimiters.
It consists of an extension on Data
with exactly two methods: encodedUsingCOBS()
and decodedFromCOBS()
.
Encoding:
let someData = ...
let cobsEncodedData = someData.encodedUsingCOBS()
// Do something with cobsEncodedData, e.g. sending across a communications link
Decoding:
let someCOBSEncodeData = ... // e.g. from a communications link
let someData = someData.decodedFromCOBS()
// Use someData like normal
The package includes a suite of unit tests.
To use the GlassGem
library in a SwiftPM project,
add the following line to the dependencies in your Package.swift
file:
.package(url: "https://github.com/armadsen/GlassGem", from: "1.0.0"),
Include "GlassGem"
as a dependency for your executable target:
.target(name: "<target>", dependencies: [
.product(name: "GlassGem", package: "GlassGem"),
]),
Finally, add import GlassGem
to your source code.
GlassGem is already completely usable for the most common scenarios. However, there are a few things I'd like to implement in the future. Pull requests for these are completely welcome. Please include tests for anything you add.
- Support for using GlassGem from Objective-C
- Support for arbitrary delimiter bytes, not just 0x00
- Performance improvements (while still emphasizing readability)