-
Notifications
You must be signed in to change notification settings - Fork 0
/
bif_datetime.gleam
81 lines (71 loc) · 2.58 KB
/
bif_datetime.gleam
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import gleam/io
import gleam/list
import gleam/dict
import gleam/string
import gleam/regex
import gleam/result
import gleam/int
import gleam/float
import gleam/dynamic
import gleam/option
import gleam/order
import l4u/sys_bridge.{
catch_ex, console_readline, console_writeln, dbgout1, dbgout2, dbgout3, deref,
do_async, internal_form, l4u_to_native, load_file, make_ref, native_to_l4u,
os_cmd, process_dict_get, process_dict_keys, process_dict_set, reset_ref,
throw_err, throw_expr,
}
@target(javascript)
import gleam/javascript/promise
import l4u/l4u_core.{
description, dump_env, env_set_global, env_set_local, eval, inspect,
main as do_repl, make_new_l4u_core_env, print, pstr, rep, repl, show,
to_l4u_bool, tokenize, trace_set_last_funcall, uneval,
}
import l4u/l4u_type.{
type Env, type Expr, BIF, BISPFORM, INT, STRING, WithEnv, native_false,
native_nil, native_true, native_undefined, to_native_dictionary, unsafe_corece,
}
import l4u/l4u_core as l4u
@external(erlang, "l4u@bif_datetime_ffi", "start")
@external(javascript, "../l4u_bif_datetime_ffi.mjs", "start")
pub fn start() -> Nil
@external(erlang, "l4u@bif_datetime_ffi", "epoch")
@external(javascript, "../l4u_bif_datetime_ffi.mjs", "epoch")
pub fn epoch() -> Int
// (now)
fn bif_now(exprs: List(Expr), env: Env) -> Expr {
let assert [] = exprs
//let timestamp32 = float.round(now())
let timestamp32 = epoch()
WithEnv(INT(timestamp32), env)
}
// (datetime-format (now) "Y-m-d H:m:s")
@external(erlang, "l4u@bif_datetime_ffi", "datetime_format")
@external(javascript, "../l4u_bif_datetime_ffi.mjs", "datetime_format")
pub fn datetime_format(timestamp: Int, format: String) -> String
// (datetime-format timestamp "Y-m-d H:m:s")
fn bif_datetime_format(exprs: List(Expr), env: Env) -> Expr {
let assert [INT(timestamp), format] = exprs
let str_format = pstr(format)
let formatted = datetime_format(timestamp, str_format)
WithEnv(STRING(formatted), env)
}
// ----------------------------------------------------------------------------
// # bif table
// ----------------------------------------------------------------------------
pub fn bif_datetime_def() -> List(#(String, Expr)) {
start()
let bif = fn(name, f) { #(name, BIF(description(name), f)) }
let bsf = fn(name, f) { #(name, BISPFORM(description(name), f)) }
[
// datetime
//bif("time-ms", bif_time_ms),
bif("now", bif_now),
bif("datetime-format", bif_datetime_format),
]
//bif("datetime", bif_datetime),
//bif("datetime-parse", bif_datetime_parse),
//bif("duration", bif_duration),
//bif("datetime-components", bif_datetime_components),
}