viceroy_lib/component/
mod.rs1use {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;