Packages

An embedded lisp interpreter based on the gleam implementation of MAL lisp.

Current section

Files

Jump to
kirala_l4u src l4u union_term.gleam
Raw

src/l4u/union_term.gleam

import gleam/dynamic.{type Dynamic}
import gleam/dict.{type Dict}
import l4u/l4u_type.{unsafe_corece}
@external(erlang, "persistent_term", "keys")
@external(javascript, "../l4u_union_term_js.mjs", "keys")
pub fn keys() -> List(String)
@external(erlang, "persistent_term", "get")
@external(javascript, "../l4u_union_term_js.mjs", "get")
pub fn get(key: String, default_value: any) -> any
@external(erlang, "persistent_term", "get")
@external(javascript, "../l4u_union_term_js.mjs", "get")
pub fn get_int(key: String, default_value: Int) -> Int
@external(erlang, "persistent_term", "get")
@external(javascript, "../l4u_union_term_js.mjs", "get")
pub fn get_str(key: String, default_value: String) -> String
@external(erlang, "persistent_term", "put")
@external(javascript, "../l4u_union_term_js.mjs", "put")
pub fn put(key: String, value: any) -> Nil
@external(erlang, "persistent_term", "put")
@external(javascript, "../l4u_union_term_js.mjs", "put")
pub fn put_int(key: String, value: Int) -> Nil
@external(erlang, "persistent_term", "put")
@external(javascript, "../l4u_union_term_js.mjs", "put")
pub fn put_str(key: String, value: String) -> Nil
@external(erlang, "persistent_term", "erase")
@external(javascript, "../l4u_union_term_js.mjs", "erase")
pub fn erase(key: String) -> Nil
pub fn get_map(key: String) -> Dict(String, any) {
let assert dic: Dict(String, any) = get(key, dict.new())
dic
}
@external(erlang, "persistent_term", "get")
@external(javascript, "../l4u_union_term_js.mjs", "get_with_default")
pub fn get_with_default(a: String, default_value: any) -> any
@external(erlang, "persistent_term", "get")
@external(javascript, "../l4u_union_term_js.mjs", "get_with_default")
pub fn nt_get_with_default(a: key, default_value: any) -> any
@external(erlang, "persistent_term", "put")
@external(javascript, "../l4u_union_term_js.mjs", "put")
pub fn nt_put(key: key, value: any) -> Nil
pub fn get_map_value(
key: String,
property_key: String,
default_value: any,
) -> any {
let assert dic: Dict(String, any) = get_with_default(key, dict.new())
case dict.get(dic, property_key) {
Ok(value) -> value
_ -> default_value
}
}
pub fn set_map_value(
key: String,
property_key: String,
property_value: Dynamic,
) -> Nil {
let dic = get_with_default(key, dict.new())
let new_dict = dict.insert(dic, property_key, property_value)
put(key, new_dict)
}