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