Gleam QS
A query string parser for Gleam.
Install
gleam add valid
Usage
QS has two modules qs
(Basic) and qs_adv
(Advance).
Basic
A query (QueryBasic)
in basic is a Dict(String, List(String))
.
Basic has not concept of single or list values. Every value is a List(String)
.
Advanced
The Advance module provides configuration to explicitly define how single and list values are serialized.
A query (QueryAdv)
is a Dict(String, OneOrMany)
.
Basic parsing
import qs
import gleam/dict
"?color=red&pet=cat&pet=dog"
|> qs.default_parse
==
Ok(
dict.from_list(
[
#("color", ["red"]),
#("pet", ["cat", "dog"]),
]
)
)
Basic serialization
import qs
import gleam/dict
let query = [
#("color", ["red"]),
#("pet", ["cat", "dog"])
]
|> dict.from_list
qs.default_serialize(query)
> "?color=red&pet=cat&pet=dog"
Advanced parsing
By default advanced uses a Rails like query scheme. E.g.
import qs_adv
import gleam/dict
"?color=red&pets[]=cat&pets[]=dog"
|> qs_adv.default_parse
==
Ok(
dict.from_list(
[
#("color", One("red")),
#("pets", Many(["cat", "dog"])),
]
)
)
But this is configurable.
let scheme = qs_adv.SchemeListAsSingleValue(
list_suffix: "[]",
separator: "|"
)
let config = qs_adv.default_config()
|> qs_adv.with_scheme(scheme)
"?color=red&pets[]=cat|dog"
|> qs_adv.parse(config)
Advanced serialization
import qs_adv
import gleam/dict
let query = [
#("color", ["red"]),
#("pets", ["cat", "dog"])
]
|> dict.from_list
qs_adv.default_serialize(query)
> "?color=red&pets[]=cat&pets[]=dog"