README.md

# GleeBOR

### A CBOR ([RFC 8949](https://www.rfc-editor.org/rfc/rfc8949.html)) Library for Gleam

[![Package Version](https://img.shields.io/hexpm/v/gleebor)](https://hex.pm/packages/gleebor)
[![Hex Docs](https://img.shields.io/badge/hex-docs-ffaff3)](https://hexdocs.pm/gleebor/)

CBOR is a self-describing standardized data format used for data interchange. It's
efficient, generally pretty fast, and best of all: has high quality implementations in
many languages. This libraries goal is to add to the list of languages that have strong
CBOR support!

> [!note] The `BitArray` syntax used throughout this library is currently unsupported by
> the JavaScript backend. Until this is fixed upstream, this library is only expected to
> work for BEAM backed applications.


```sh
gleam add gleebor
```
```gleam
import gleebor
import io

fn read_my_bytes() {
  // 0 major arg, 24 to signal the following byte is the payload value, 123 is an 8-bit
  //number
  <<0:3, 24:5, 123:8>>
}

pub fn main() {
  // Get your bytes somehow!
  let bytes = read_my_bytes()

  let assert Ok(number) = gleebor.decode_int(bytes)
  io.debug(number) // => 123
}
```

Further documentation can be found at <https://hexdocs.pm/gleebor>.

## Development

```sh
gleam test  # Run the tests
gleam shell # Run an Erlang shell
```

## Status

The following describes the current status for this library's progress.


- [/] Decode
  - [x] Ints
  - [ ] Floats
  - [x] Text Strings (Sized)
  - [x] Bytes (sized)
  - [x] Arrays (sized)
  - [ ] Maps
  - [ ] Tags
  - [ ] Indefinite sequences
- [ ] Encode
  - [ ] Ints
  - [ ] Floats
  - [ ] Text Strings (Sized)
  - [ ] Bytes (sized)
  - [ ] Arrays (sized)
  - [ ] Maps
  - [ ] Tags
  - [ ] Indefinite sequences