1#![forbid(unsafe_code)]
11#![deny(missing_docs)]
12#![allow(deprecated)]
13
14mod address;
15mod citizen;
16mod cli;
17mod clock;
18mod codecio;
19mod connection;
20mod cookbook_web;
21mod cookbook_web_json;
22mod coroutine;
23mod cron;
24mod device_edge;
25mod dispatch;
26mod frame;
27mod helpers;
28#[cfg(feature = "server-net-http")]
29mod http;
30#[cfg(feature = "server-net-http")]
31mod http_client;
32mod isolation;
33mod ops;
34mod ops_lifecycle;
35mod ops_shell;
36mod pool;
37mod realize;
38mod registries;
39mod repl;
40mod router;
41mod runtime;
42mod server;
43mod site;
44mod stream_support;
45mod transport;
46mod trigger;
47mod voice;
48mod wasm;
49
50pub use address::ServerAddress;
51pub use citizen::{
52 ServerAddressDescriptor, ServerFrameDescriptor, server_address_class_symbol,
53 server_frame_class_symbol,
54};
55pub use clock::{DeterministicWallClock, SystemWallClock, WallClock, WallTimestamp};
56pub use codecio::{decode_frame_payload, encode_frame_payload};
57pub use connection::{Connection, Session};
58pub use cookbook_web::{CookbookWebResponse, CookbookWebState};
59pub use coroutine::{Coroutine, CoroutineStatus};
60pub use device_edge::{
61 DeviceEdgeProfile, DeviceEdgeSession, LedgerRef, LinkKind, register_watch_edge_session,
62 watch_route_order,
63};
64pub use frame::{
65 FrameEnvelope, FrameKind, LifecycleCommand, ServerFrame, eval_reply_from_frame,
66 eval_request_from_frame, server_frame_from_reply, server_frame_from_request,
67};
68pub use helpers::parse_duration;
69#[cfg(feature = "server-net-http")]
70pub use http_client::{HttpGetResponse, http_get};
71pub use isolation::{IsolationPolicy, ShareMode};
72pub use realize::{realize as realize_site_fragment, realize_stream_events};
73pub use registries::{
74 AddressResolver, LineDriverFactory, ResolvedAddress, register_address_resolver,
75 register_line_driver,
76};
77pub(crate) use registries::{address_resolvers, line_driver_factories};
78pub use repl::{DriverSpec as ReplDriverSpec, LineDriver, ReplOptions, ReplOutput, run_repl};
79pub use router::FrameRouter;
80pub use runtime::ServerRuntime;
81pub use server::{Server, ServerStatus, ThreadMode};
82pub use sim_cookbook::EmbeddedDir;
83pub use sim_lib_cookbook::CookbookCapabilityProfile;
84pub use site::{
85 CoroutineEvalSite, EvalSite, FabricEvalSite, LocalEvalSite, LoopEvalSite, PipelineEvalSite,
86 Site, SiteKind, StreamSink,
87};
88pub use stream_support::{
89 BufferedStreamSink, StreamHandle, stream_chunk_frame_from_expr, stream_end_frame,
90 stream_frame_from_expr, stream_frame_to_expr, stream_frame_to_value,
91};
92pub use transport::{
93 ConnectionTransport, LocalTransport, LoopbackTransportEndpoint, ServerTransport,
94 TcpServerTransport, connect_transport_site, connect_transport_site_with_loopback,
95 decode_transport_frame, encode_transport_frame, register_loopback_transport_endpoint,
96};
97pub use trigger::TriggerHandle;
98pub use voice::{
99 ASR_TRANSCRIPT_KIND, ASR_TRANSCRIPT_NAMESPACE, MIC_CAPTURE_KIND, MIC_CAPTURE_NAMESPACE,
100 ModeledAsrFabric, XR_MIC_CHUNK_KIND, XR_MIC_CHUNK_NAMESPACE, modeled_asr_site,
101 modeled_glasses_asr_site,
102};
103pub use wasm::register_wasm_region;
104
105use crate::isolation::IsolatedEvalSite;
106use cli::{register_server_cli, server_cli_exports};
107use dispatch::{register_server_functions, server_exports};
108use helpers::{
109 connection_arg, coroutine_target_from_value, ensure_installed_codec, keyword, server_arg,
110 server_from_value,
111};
112use ops::{
113 server_cancel_coroutine, server_connect, server_coroutine_status, server_lisp, server_loop,
114 server_notify, server_pipeline, server_realize, server_receive, server_request,
115 server_resume_exprs, server_send, server_start_loop, server_stream, server_stream_next,
116 server_yield,
117};
118use ops_lifecycle::server_start;
119use ops_shell::{server_repl, server_trigger, server_trigger_poll, server_wasm_region};
120use sim_kernel::{
121 AbiVersion, Cx, Lib, LibManifest, LibTarget, Linker, Result, Symbol, Value, Version,
122};
123use stream_support::stream_handle_arg;
124use transport::shutdown_server_transport;
125
126pub struct ServerLib;
129
130impl Lib for ServerLib {
131 fn manifest(&self) -> LibManifest {
132 LibManifest {
133 id: Symbol::new("server"),
134 version: Version(env!("CARGO_PKG_VERSION").to_owned()),
135 abi: AbiVersion { major: 0, minor: 1 },
136 target: LibTarget::HostRegistered,
137 requires: Vec::new(),
138 capabilities: Vec::new(),
139 exports: {
140 let mut exports = server_exports();
141 exports.extend(server_cli_exports());
142 exports
143 },
144 }
145 }
146
147 fn load(&self, cx: &mut sim_kernel::LoadCx, linker: &mut Linker<'_>) -> Result<()> {
148 register_server_functions(cx, linker)?;
149 register_server_cli(cx, linker)?;
150 Ok(())
151 }
152}
153
154pub fn install_server_lib(cx: &mut Cx) -> Result<()> {
157 sim_lib_core::install_once(cx, &ServerLib).map(|_| ())
158}
159
160pub(crate) fn symbol_list_value(cx: &mut Cx, symbols: &[Symbol]) -> Result<Value> {
161 cx.factory().list(
162 symbols
163 .iter()
164 .cloned()
165 .map(|symbol| cx.factory().symbol(symbol))
166 .collect::<Result<Vec<_>>>()?,
167 )
168}
169
170pub static RECIPES: sim_cookbook::EmbeddedDir =
172 include!(concat!(env!("OUT_DIR"), "/cookbook_recipes.rs"));
173
174#[cfg(test)]
175mod tests;