Packages
gleam_bson
0.1.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
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)
- [ ] support encoding and decoding other bson types
- [ ] support generating new objectIds
## Usage
### Encoding
```
import myapp.{Cat}
import gleam/list
import bson/types
import bson.{encode}
import bson/object_id.{from_string}
fn cat_to_bson(cat: Cat) -> Result(BitString, Nil) {
case from_string(cat.id) {
Ok(id) ->
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) }),
),
),
]))
Error(Nil) -> Error(Nil)
}
}
```
### Decoding
```
import myapp.{Cat}
import gleam/list
import bson/types
import bson.{decode}
import bson/object_id.{to_string}
fn cat_from_bson(data: BitString) -> Result(Cat, Nil) {
case decode(data) {
Ok(doc) -> {
let [
#("id", types.ObjectId(id)),
#("name", types.Str(name)),
#("lives", types.Integer(lives)),
#("nicknames", types.Array(nicknames)),
] = doc
Ok(Cat(
id: id
|> to_string,
name: name,
lives: lives,
nicknames: nicknames
|> list.map(fn(n) {
case n {
types.Str(n) -> n
}
}),
))
}
Error(Nil) -> Error(Nil)
}
}
```