#![doc(html_no_source)]
pub mod client;
mod endpoint;
pub mod foreign;
pub mod invoke;
pub mod limits;
pub mod proto;
pub mod remote;
pub mod replicated;
pub mod security;
pub mod server;
mod shm;
mod spin;
use fusee::Config;
use std::sync::Arc;
pub fn remote_config(addr: &str) -> std::io::Result<Config> {
Ok(remote_worker(addr)?.0)
}
pub fn remote_worker(addr: &str) -> std::io::Result<(Config, remote::Remote)> {
worker(remote::Remote::connect(addr)?)
}
pub fn remote_worker_with(
addr: &str,
security: &security::Security,
) -> std::io::Result<(Config, remote::Remote)> {
worker(remote::Remote::connect_with(addr, security)?)
}
fn worker(remote: remote::Remote) -> std::io::Result<(Config, remote::Remote)> {
let handle = remote.clone();
let limits: Arc<dyn fusee::limits::LimitBackend> = remote.limits();
let shards = remote.shards();
let factory: fusee::engine::EnvFactory = Arc::new(move |shard| {
let env: Box<dyn fusee::env::Env> = Box::new(remote.env(shard));
Ok(env)
});
let mut cfg = Config::memory();
cfg.durability = fusee::Durability::Custom(factory);
cfg.shards = Some(shards);
cfg.park_after = std::time::Duration::from_secs(5);
cfg.limits = Some(limits);
Ok((cfg, handle))
}
pub use client::{Client, ClientStream, serve_calls};
pub use server::{Liveness, Server, ServerConfig};