lpil / pgo

🐘 Use PostgreSQL databases with PGO
https://hexdocs.pm/gleam_pgo/
Apache License 2.0
123 stars 12 forks source link

Add ability to return maps from rows after query #33

Closed ghivert closed 1 month ago

ghivert commented 1 month ago

Hi!

Currently, gleam_pgo will return all rows as tuples. To be able to reuse decoders between JSON and PGO, it would be nice to let the possibility for users to return rows directly.

An example:

pub type Dummy {
  Dummy(
    id: String,
    dummy: Int,
    field: String,
  )
}

pub fn encode(dummy: Dummy) {
  json.object([
    #("id", json.string(dummy.id)),
    #("dummy", json.int(dummy.int)),
    #("field", json.string(dummy.field)),
  ])
  |> json.to_string
}

pub fn decode(dyn: dynamic.Dynamic) {
  decode.decode3(
    Dummy,
    dynamic.field("id", dynamic.string),
    dynamic.field("dummy, dynamic.int),
    dynamic.field("field", dynamic.string),
  )(dyn)
}

pub fn query() {
  "SELECT id, dummy, field
   FROM dummies"
  |> pgo.execute(db, [], decode)
}