viceroy_lib/component/
mod.rs

1use {crate::linking::ComponentCtx, wasmtime::component};
2
3component::bindgen!({
4    path: "wit",
5    world: "fastly:api/compute",
6    async: true,
7    with: {
8        "fastly:api/uap/user-agent": uap::UserAgent,
9        "fastly:api/kv-store/lookup-result": kv_store::LookupResult,
10
11        "wasi:clocks": wasmtime_wasi::bindings::clocks,
12        "wasi:random": wasmtime_wasi::bindings::random,
13        "wasi:io": wasmtime_wasi::bindings::io,
14        "wasi:cli": wasmtime_wasi::bindings::cli,
15    },
16
17    trappable_error_type: {
18        "fastly:api/types/error" => types::TrappableError,
19    },
20
21    trappable_imports: [
22        "downstream-client-ip-addr",
23        "downstream-server-ip-addr",
24        "header-values-get",
25        "[method]lookup-result.body",
26        "[method]lookup-result.metadata",
27        "[method]lookup-result.generation"
28    ],
29});
30
31pub fn link_host_functions(linker: &mut component::Linker<ComponentCtx>) -> anyhow::Result<()> {
32    fn wrap(ctx: &mut ComponentCtx) -> wasmtime_wasi::WasiImpl<&mut ComponentCtx> {
33        wasmtime_wasi::WasiImpl(ctx)
34    }
35
36    wasmtime_wasi::bindings::clocks::wall_clock::add_to_linker_get_host(linker, wrap)?;
37    wasmtime_wasi::bindings::clocks::monotonic_clock::add_to_linker_get_host(linker, wrap)?;
38    wasmtime_wasi::bindings::random::random::add_to_linker_get_host(linker, wrap)?;
39    wasmtime_wasi::bindings::filesystem::types::add_to_linker_get_host(linker, wrap)?;
40    wasmtime_wasi::bindings::filesystem::preopens::add_to_linker_get_host(linker, wrap)?;
41    wasmtime_wasi::bindings::io::error::add_to_linker_get_host(linker, wrap)?;
42    wasmtime_wasi::bindings::io::streams::add_to_linker_get_host(linker, wrap)?;
43    wasmtime_wasi::bindings::io::poll::add_to_linker_get_host(linker, wrap)?;
44    wasmtime_wasi::bindings::cli::environment::add_to_linker_get_host(linker, wrap)?;
45    wasmtime_wasi::bindings::cli::exit::add_to_linker_get_host(linker, &Default::default(), wrap)?;
46    wasmtime_wasi::bindings::cli::stdin::add_to_linker_get_host(linker, wrap)?;
47    wasmtime_wasi::bindings::cli::stdout::add_to_linker_get_host(linker, wrap)?;
48    wasmtime_wasi::bindings::cli::stderr::add_to_linker_get_host(linker, wrap)?;
49
50    fastly::api::acl::add_to_linker(linker, |x| x)?;
51    fastly::api::async_io::add_to_linker(linker, |x| x)?;
52    fastly::api::backend::add_to_linker(linker, |x| x)?;
53    fastly::api::cache::add_to_linker(linker, |x| x)?;
54    fastly::api::compute_runtime::add_to_linker(linker, |x| x)?;
55    fastly::api::config_store::add_to_linker(linker, |x| x)?;
56    fastly::api::device_detection::add_to_linker(linker, |x| x)?;
57    fastly::api::dictionary::add_to_linker(linker, |x| x)?;
58    fastly::api::erl::add_to_linker(linker, |x| x)?;
59    fastly::api::geo::add_to_linker(linker, |x| x)?;
60    fastly::api::http_body::add_to_linker(linker, |x| x)?;
61    fastly::api::http_downstream::add_to_linker(linker, |x| x)?;
62    fastly::api::http_req::add_to_linker(linker, |x| x)?;
63    fastly::api::http_resp::add_to_linker(linker, |x| x)?;
64    fastly::api::http_types::add_to_linker(linker, |x| x)?;
65    fastly::api::image_optimizer::add_to_linker(linker, |x| x)?;
66    fastly::api::kv_store::add_to_linker(linker, |x| x)?;
67    fastly::api::log::add_to_linker(linker, |x| x)?;
68    fastly::api::object_store::add_to_linker(linker, |x| x)?;
69    fastly::api::purge::add_to_linker(linker, |x| x)?;
70    fastly::api::secret_store::add_to_linker(linker, |x| x)?;
71    fastly::api::shielding::add_to_linker(linker, |x| x)?;
72    fastly::api::types::add_to_linker(linker, |x| x)?;
73    fastly::api::uap::add_to_linker(linker, |x| x)?;
74
75    Ok(())
76}
77
78pub mod acl;
79pub mod async_io;
80pub mod backend;
81pub mod cache;
82pub mod compute_runtime;
83pub mod config_store;
84pub mod device_detection;
85pub mod dictionary;
86pub mod erl;
87pub mod error;
88pub mod geo;
89pub mod headers;
90pub mod http_body;
91pub mod http_downstream;
92pub mod http_req;
93pub mod http_resp;
94pub mod http_types;
95pub mod image_optimizer;
96pub mod kv_store;
97pub mod log;
98pub mod object_store;
99pub mod purge;
100pub mod secret_store;
101pub mod shielding;
102pub mod types;
103pub mod uap;