Packages
gleam_bson
0.9.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).
- [x] support encoding and decoding min, max, timestamp, datetime and javascript bson types.
- [x] support encoding and decoding the generic binary subtype.
- [ ] support encoding and decoding regex and decimal128 bson types.
- [ ] support encoding and decoding other binary subtypes.
- [ ] support generating new object-ids
## Usage
### Encoding
```gleam
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
```gleam
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)
}
}
```