lib.rsannotatedlib.rssource44 lines · 1.5 KB · raw
1//! What a site needs from the Workers runtime and from nothing else: where the log goes, and the
2//! deploy's variables. Responses are `aldebaran-axum`'s; the Worker family answers over axum too.
3
4use aldebaran_gate::Switch;
5use aldebaran_log::{Level, Route, Served};
6
7/// Writes one request's line to the Worker's console at its level.
8pub fn write<R: Route>(served: &Served<R>) {
9    emit(served.level(), &served.to_string());
10}
11
12/// Something the Worker itself got wrong, in words that carry no request.
13pub fn failure(what: &str) {
14    emit(Level::Error, what);
15}
16
17#[cfg(target_arch = "wasm32")]
18fn emit(level: Level, line: &str) {
19    match level {
20        Level::Debug => worker::console_debug!("{line}"),
21        Level::Info => worker::console_log!("{line}"),
22        Level::Warn => worker::console_warn!("{line}"),
23        Level::Error => worker::console_error!("{line}"),
24    }
25}
26
27/// Native builds (the tests) have no console to write to.
28#[cfg(not(target_arch = "wasm32"))]
29fn emit(_level: Level, _line: &str) {}
30
31/// A variable of the deploy, or `None` if it is not set.
32pub fn var(env: &worker::Env, name: &str) -> Option<String> {
33    env.var(name).ok().map(|value| value.to_string())
34}
35
36/// A deploy's `on`/`off` switch. A value that is neither is complained about in the console, and the
37/// site runs as `off`.
38pub fn switch(env: &worker::Env, name: &str) -> Switch {
39    let (switch, complaint) = Switch::resolve(name, var(env, name).as_deref());
40    if let Some(complaint) = complaint {
41        failure(&complaint);
42    }
43    switch
44}