Packages
gleam_bson
0.10.1
0.27.0
retired
0.26.0
retired
0.25.0
retired
0.24.0
retired
0.23.0
retired
0.22.0
retired
0.21.0
retired
0.20.0
retired
0.19.0
retired
0.18.0
retired
0.17.0
retired
0.16.0
retired
0.15.0
retired
0.14.0
retired
0.13.0
retired
0.12.0
retired
0.11.0
retired
0.10.1
retired
0.10.0
retired
0.9.0
retired
0.8.0
retired
0.7.0
retired
0.6.0
retired
0.5.0
retired
0.4.0
retired
0.3.0
retired
0.2.0
retired
0.1.0
retired
bson encoder and decoder for gleam
Retired package: Renamed - Republished as bison
Current section
Files
Jump to
Current section
Files
gleam_bson
README.md
README.md
# gleam_bson
A bson encoder and decoder written in gleam
## Quick start
```sh
gleam test # Run the tests
gleam shell # Run an Erlang shell
```
## Installation
```sh
gleam add gleam_bson
```
## Roadmap
- [x] support encoding and decoding basic bson types (null, string, int32, int64, double, boolean, objectId, array, document).
- [x] support encoding and decoding min, max, timestamp, datetime and javascript bson types.
- [x] support encoding and decoding the generic, md5 and user-defined binary subtypes.
- [ ] support encoding and decoding regex and decimal128 bson types.
- [ ] support encoding and decoding uuid and encrypted binary subtypes.
- [ ] support generating new object-ids
## Usage
### Encoding
```gleam
import bson/md5
import gleam/list
import bson/types
import bson.{encode}
import bson/object_id
fn cat_to_bson(cat: Cat) -> Result(BitString, Nil) {
try id = object_id.from_string(cat.id)
try checksum = md5.from_string(cat.checksum)
Ok(encode([
#("id", types.ObjectId(id)),
#("name", types.Str(cat.name)),
#("lives", types.Integer(cat.lives)),
#(
"nicknames",
types.Array(
cat.nicknames
|> list.map(fn(n) { types.Str(n) }),
),
),
#("checksum", types.Binary(types.MD5(checksum))),
]))
}
```
### Decoding
```gleam
import bson/md5
import gleam/list
import bson/types
import bson.{decode}
import bson/object_id
fn cat_from_bson(data: BitString) -> Result(Cat, Nil) {
try doc = decode(data)
let [
#("id", types.ObjectId(id)),
#("name", types.Str(name)),
#("lives", types.Integer(lives)),
#("nicknames", types.Array(nicknames)),
#("checksum", types.Binary(types.MD5(checksum))),
] = doc
Ok(Cat(
id: id
|> object_id.to_string,
name: name,
lives: lives,
nicknames: nicknames
|> list.map(fn(n) {
assert types.Str(n) = n
n
}),
checksum: checksum
|> md5.to_string,
))
}
```