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
use crate::Result;

pub trait ServiceTrait {
    fn mode() -> ServiceMode
    where
        Self: Sized;

    fn new() -> Self
    where
        Self: Sized;

    fn run(&mut self) -> Result<()>;

    #[cfg(any(feature = "http1", feature = "http2"))]
    fn routes(&self) -> axum::Router {
        axum::Router::new()
    }
}

#[derive(Debug)]
pub enum ServiceMode {
    #[cfg(feature = "console")]
    Console,
    #[cfg(feature = "schedule")]
    Schedule,
    #[cfg(any(feature = "http1", feature = "http2"))]
    Server,
    Unsupported,
}