https://github.com/lpil/decode
Ergonomic dynamic decoders for Gleam!
https://github.com/lpil/decode
Last synced: about 1 year ago
JSON representation
Ergonomic dynamic decoders for Gleam!
- Host: GitHub
- URL: https://github.com/lpil/decode
- Owner: lpil
- Created: 2024-06-29T21:34:49.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2024-12-19T12:52:22.000Z (over 1 year ago)
- Last Synced: 2025-03-15T12:54:46.710Z (about 1 year ago)
- Language: Gleam
- Homepage:
- Size: 79.1 KB
- Stars: 76
- Watchers: 3
- Forks: 11
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
Awesome Lists containing this project
README
# decode
Ergonomic dynamic decoders for Gleam!
[](https://hex.pm/packages/decode)
[](https://hexdocs.pm/decode/)
```sh
gleam add decode
```
```gleam
import decode/zero as decode
import gleam/dynamic.{type Dynamic}
pub type User {
User(name: String, email: String, is_admin: Bool)
}
/// Decode data of this shape into a `User` record.
///
/// {
/// "name" -> "Lucy",
/// "email" -> "lucy@example.com",
/// "is-admin" -> true
/// }
///
pub fn run(data: Dynamic) {
let decoder = {
use name <- decode.field("name", decode.string)
use email <- decode.field("email", decode.string)
use is_admin <- decode.field("is-admin", decode.bool)
decode.success(User(name:, email:, is_admin:))
}
decode.run(data, decoder)
}
```
Or, alternatively:
```gleam
import decode
import gleam/dynamic.{type Dynamic}
pub type User {
User(name: String, email: String, is_admin: Bool)
}
/// Decode data of this shape into a `User` record.
///
/// {
/// "name" -> "Lucy",
/// "email" -> "lucy@example.com",
/// "is-admin" -> true
/// }
///
pub fn run(data: Dynamic) {
let decoder =
decode.into({
use name <- decode.parameter
use email <- decode.parameter
use is_admin <- decode.parameter
User(name, email, is_admin)
})
|> decode.field("name", decode.string)
|> decode.field("email", decode.string)
|> decode.field("is-admin", decode.bool)
decoder
|> decode.from(data)
}
```
For more documentation and examples view .