Skip to main content

aver/services/
mod.rs

1/// Built-in platform services available to Aver programs.
2///
3/// Each service is a named namespace (`Args`, `Console`, `Http`, `Disk`, `Tcp`, `HttpServer`, `Time`, `Env`, `Random`, `Terminal`) that must
4/// be declared as an effect in order to be called:
5///
6/// ```aver
7/// fn fetch(url: String) -> Result<HttpResponse, String>
8///     ! [Http.get]
9///     Http.get(url)
10/// ```
11///
12/// Every service module exposes the same three functions:
13/// - `register(global)` — insert the namespace into the global env
14/// - `effects(name)` — return required effects for a builtin name (or empty)
15/// - `call(name, args)` — handle the call, returning `None` if not owned
16///
17/// Pure type namespaces (Int, Float, String, List) live in `src/types/` instead.
18/// Return every effect name that any service can require.
19/// Used by the REPL to grant full effect permissions to wrapper functions.
20pub fn all_effect_names() -> Vec<&'static str> {
21    let mut out = Vec::new();
22    out.extend_from_slice(args::DECLARED_EFFECTS);
23    out.extend_from_slice(console::DECLARED_EFFECTS);
24    out.extend_from_slice(disk::DECLARED_EFFECTS);
25    out.extend_from_slice(env::DECLARED_EFFECTS);
26    #[cfg(feature = "runtime-net")]
27    out.extend_from_slice(http::DECLARED_EFFECTS);
28    out.extend_from_slice(http_server::DECLARED_EFFECTS);
29    out.extend_from_slice(random::DECLARED_EFFECTS);
30    out.extend_from_slice(tcp::DECLARED_EFFECTS);
31    out.extend_from_slice(time::DECLARED_EFFECTS);
32    #[cfg(feature = "terminal")]
33    out.extend_from_slice(terminal::DECLARED_EFFECTS);
34    out
35}
36
37pub mod args;
38pub mod console;
39pub mod disk;
40pub mod env;
41#[cfg(feature = "runtime-net")]
42pub mod http;
43pub mod http_server;
44pub mod random;
45pub mod tcp;
46#[cfg(feature = "terminal")]
47pub mod terminal;
48pub mod time;