--- version: 1.4.0 title: enum array decoding file: ./test/squirrel_test.gleam test_name: enum_array_decoding_test --- import gleam/dynamic/decode import pog pub type QueryRow { QueryRow(res: List(SquirrelColour)) } pub fn query( db: pog.Connection, ) -> Result(pog.Returned(QueryRow), pog.QueryError) { let decoder = { use res <- decode.field(0, decode.list(squirrel_colour_decoder())) decode.success(QueryRow(res:)) } "select array['red'::squirrel_colour] as res" |> pog.query |> pog.returning(decoder) |> pog.execute(db) } pub type SquirrelColour { LightBrown Grey Red } fn squirrel_colour_decoder() -> decode.Decoder(SquirrelColour) { use squirrel_colour <- decode.then(decode.string) case squirrel_colour { "light brown" -> decode.success(LightBrown) "grey" -> decode.success(Grey) "red" -> decode.success(Red) _ -> decode.failure(LightBrown, "SquirrelColour") } }