Packages
gleam_bson
0.26.0
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
bson encoder and decoder for 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, javascript and regex bson types.
- [x] support encoding and decoding the generic, md5, uuid and user-defined binary subtypes.
- [x] support generating new object-ids
- [ ] support encoding and decoding decimal128 bson type.
- [ ] support encoding and decoding encrypted binary subtype.
## Usage
### Encoding
```gleam
import gleam/list
import gleam/result
import bson/md5
import bson/value
import bson.{encode}
import bson/object_id
fn cat_to_bson(cat: Cat) -> Result(BitString, Nil) {
use id <- result.then(object_id.from_string(cat.id))
use checksum <- result.then(md5.from_string(cat.checksum))
Ok(encode([
#("id", value.ObjectId(id)),
#("name", value.Str(cat.name)),
#("lives", value.Integer(cat.lives)),
#("nicknames", value.Array(list.map(cat.nicknames, value.Str))),
#("checksum", value.Binary(value.MD5(checksum))),
#("name_pattern", value.Regex(#("[a-z][a-z0-9]+", ""))),
]))
}
```
### Decoding
```gleam
import gleam/list
import gleam/result
import bson/md5
import bson/value
import bson.{decode}
import bson/object_id
fn cat_from_bson(data: BitString) -> Result(Cat, Nil) {
use doc <- result.then(decode(data))
let [
#("id", value.ObjectId(id)),
#("name", value.Str(name)),
#("lives", value.Integer(lives)),
#("nicknames", value.Array(nicknames)),
#("checksum", value.Binary(value.MD5(checksum))),
#("name_pattern", value.Regex(#(pattern, options))),
] = doc
Ok(Cat(
id: object_id.to_string(id),
name: name,
lives: lives,
nicknames: list.map(
nicknames,
fn(n) {
let assert value.Str(n) = n
n
},
),
checksum: md5.to_string(checksum),
))
}
```