Current section

Files

Jump to
glemplate src glemplate assigns.gleam
Raw

src/glemplate/assigns.gleam

//// Assigns are used to insert dynamic data into a template. This module
//// contains convenience functions for creating assigns, but you may also
//// create the dict manually with Gleam's dict functions if you so wish.
import gleam/dict.{type Dict}
import glemplate/ast.{type VarName}
/// Data in an assign. Note that only `String` and `Int` are stringifiable
/// values.
pub type AssignData {
String(String)
Int(Int)
/// A function to execute that returns assign data on demand.
Lazy(LazyFn)
Bool(Bool)
Dict(Dict(VarName, AssignData))
List(List(AssignData))
}
/// Lazy function that should return assign data when executed.
pub type LazyFn =
fn() -> AssignData
/// Assigns given to a template for rendering dynamic content.
pub type Assigns =
Dict(VarName, AssignData)
pub fn new() -> Assigns {
dict.new()
}
pub fn from_list(list: List(#(VarName, AssignData))) -> Assigns {
dict.from_list(list)
}
pub fn add_string(assigns: Assigns, name: VarName, value: String) {
dict.insert(assigns, name, String(value))
}
pub fn add_int(assigns: Assigns, name: VarName, value: Int) {
dict.insert(assigns, name, Int(value))
}
pub fn add_lazy(assigns: Assigns, name: VarName, value: LazyFn) {
dict.insert(assigns, name, Lazy(value))
}
pub fn add_bool(assigns: Assigns, name: VarName, value: Bool) {
dict.insert(assigns, name, Bool(value))
}
pub fn add_list(assigns: Assigns, name: VarName, value: List(AssignData)) {
dict.insert(assigns, name, List(value))
}
pub fn add_dict(
assigns: Assigns,
name: VarName,
value: Dict(VarName, AssignData),
) {
dict.insert(assigns, name, Dict(value))
}