//! varde-daemon library surface. //! //! The daemon is a binary, but its internals are exposed as a library so //! integration tests can run real daemons in-process on ephemeral sockets. pub mod config; pub mod daemon; pub mod discovery; pub mod dscp; pub mod meta; pub mod metered; #[cfg(feature = "socket-api")] pub mod server; pub mod shaped; pub mod store; pub mod transfer; #[cfg(feature = "socket-api")] use anyhow::Result; /// Run a daemon with the given config until the future is dropped or the /// listener fails. The socket is bound before the accept loop starts, so /// once this future has been polled the socket path exists. #[cfg(feature = "socket-api")] pub async fn run(config: config::Config) -> Result<()> { let socket_path = config.socket_path.clone(); let daemon = daemon::Daemon::open(config).await?; let listener = server::bind_socket(&socket_path)?; server::serve(listener, daemon).await }