Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/sam-peach/simple_slip

A simple, lightweight implementation SLIP encoding for Rust!
https://github.com/sam-peach/simple_slip

encoding rust serial slip

Last synced: about 1 month ago
JSON representation

A simple, lightweight implementation SLIP encoding for Rust!

Awesome Lists containing this project

README

        

# Simple SLIP

A simple, lightweight implementation of [RFC 1055](https://tools.ietf.org/html/rfc1055) SLIP encoding for Rust!

## What is SLIP encoding?

SLIP (serial line internet protocol) encoding is a very simple way of packaging so it can be transmitted to some other receiver. I'd highly recommend reading the [Wikipedia article](https://en.wikipedia.org/wiki/Serial_Line_Internet_Protocol) on the topic for some more insight!

## Examples

SLIP is used in encoding data to be sent and decoding data to be read.

### Encoding

**NOTE: Each packet will _start_ and _end_ with an `END` (0xC0) byte.**

```rust
use simple_slip::encode;

let input: Vec = vec![0x01, 0xDB, 0x49, 0xC0, 0x15];
let expected: Vec = vec![0xC0, 0x01, 0xDB, 0xDD, 0x49, 0xDB, 0xDC, 0x15, 0xC0];

let result: Vec = encode(&input).unwrap();

assert_eq!(result, expected);
```

### Decoding

**NOTE: Each packet will start decoding from the second occurrence of the `END` (0xC0) byte.**

**The following data array would only decode `0x01` as it's the only byte after the second `END` (0xC0) byte:**

```
[0xA1, 0xA2, 0xA3, 0xC0, 0xC0, 0x01] --decode--> [0x01]
```

```rust
use simple_slip::decode;

let input: Vec = vec![0xA1, 0xA2, 0xA3, 0xC0, 0xC0, 0x01, 0xDB, 0xDD, 0x49, 0xDB, 0xDC, 0x15, 0xC0];
let expected: Vec = vec![0x01, 0xDB, 0x49, 0xC0, 0x15];

let result: Vec = decode(&input).unwrap();

assert_eq!(result, expected);
```