1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
pub mod server;
pub mod state;

use std::{
    error::Error,
    net::{SocketAddr, ToSocketAddrs},
    sync::Arc,
    thread::JoinHandle,
};

pub use crate::state::TelemetryState;

pub fn new_state() -> Arc<TelemetryState> {
    Arc::new(TelemetryState::default())
}

pub fn spawn<A>(
    address: A,
    state: Arc<TelemetryState>,
) -> Result<(SocketAddr, JoinHandle<()>), Box<dyn Error + Send + Sync>>
where
    A: ToSocketAddrs + Send + 'static,
{
    let server = server::listen(address, state);

    match server {
        Ok(server) => {
            let address = server.server_addr();
            let handle = std::thread::spawn(move || server.run());

            Ok((address, handle))
        }
        Err(e) => Err(e),
    }
}