Packages
lustre
5.1.0
5.7.1
5.7.0
5.6.0
5.5.2
5.5.1
5.5.0
5.4.0
5.3.5
5.3.4
5.3.3
5.3.2
5.3.1
5.3.0
5.2.1
5.2.0
5.1.1
5.1.0
5.0.3
5.0.2
5.0.1
5.0.0
4.6.4
4.6.3
4.6.2
4.6.1
4.6.0
4.5.1
4.5.0
4.4.4
4.4.3
4.4.1
4.4.0
4.3.6
4.3.5
4.3.4
4.3.3
4.3.2
4.3.1
4.3.0
4.2.6
4.2.5
4.2.4
4.2.3
4.2.2
4.2.1
4.2.0
4.1.8
4.1.7
4.1.6
4.1.5
4.1.4
4.1.3
4.1.2
4.1.1
4.1.0
4.0.0
4.0.0-rc1
4.0.0-rc.2
3.1.4
3.1.3
3.1.2
3.1.1
3.1.0
3.0.12
3.0.11
3.0.10
3.0.9
3.0.8
3.0.7
3.0.6
3.0.5
3.0.4
3.0.3
3.0.2
3.0.1
3.0.0
3.0.0-rc.8
3.0.0-rc.7
3.0.0-rc.6
3.0.0-rc.5
3.0.0-rc.4
3.0.0-rc.3
3.0.0-rc.2
3.0.0-rc.1
2.0.1
2.0.0
1.3.0
1.2.0
1.1.0
1.0.0
Create HTML templates, single page applications, Web Components, and real-time server components in Gleam!
Current section
Files
Jump to
Current section
Files
src/lustre/internals/json_object_builder.gleam
//// This module contains helper functions for building up json objects using
//// pipelines. This allows us to skip "empty" values, reducing payload size.
////
//// It builds up a list of entries in reverse; but since we do not care about
//// the order of our keys, we can just leave the list like it is.
import gleam/json.{type Json}
import lustre/internals/constants
pub type Builder =
List(#(String, Json))
pub fn new() -> Builder {
constants.empty_list
}
pub fn tagged(kind: Int) -> Builder {
[#("kind", json.int(kind))]
}
pub fn build(entries: Builder) -> Json {
json.object(entries)
}
pub fn json(entries: Builder, key: String, value: Json) -> Builder {
[#(key, value), ..entries]
}
pub fn string(entries: Builder, key: String, value: String) -> Builder {
case value != "" {
True -> [#(key, json.string(value)), ..entries]
False -> entries
}
}
pub fn int(entries: Builder, key: String, value: Int) -> Builder {
case value != 0 {
True -> [#(key, json.int(value)), ..entries]
False -> entries
}
}
pub fn bool(entries: Builder, key: String, value: Bool) -> Builder {
case value {
True -> [#(key, json.int(1)), ..entries]
False -> entries
}
}
pub fn list(
entries: Builder,
key: String,
values: List(a),
to_json: fn(a) -> Json,
) -> Builder {
case values {
[] -> entries
_ -> [#(key, json.array(values, to_json)), ..entries]
}
}
pub fn object(entries: Builder, key: String, nested: Builder) -> Builder {
case nested {
[] -> entries
_ -> [#(key, json.object(nested)), ..entries]
}
}