Skip to main content

hyperlane_plugin/process/
fn.rs

1use super::*;
2
3#[instrument_trace]
4pub async fn create<P, F, Fut>(pid_path: P, server_hook: F)
5where
6    P: AsRef<str>,
7    F: Fn() -> Fut + Send + Sync + 'static,
8    Fut: Future<Output = ()> + Send + 'static,
9{
10    let args: Vec<String> = args().collect();
11    debug!("Process create args{COLON_SPACE}{args:?}");
12    let mut manager: ServerManager = ServerManager::new();
13    manager
14        .set_pid_file(pid_path.as_ref())
15        .set_server_hook(server_hook);
16    let is_daemon: bool = args.len() >= 3 && args[2].to_lowercase() == DAEMON_FLAG;
17    let start_server = || async {
18        if is_daemon {
19            match manager.start_daemon().await {
20                Ok(_) => info!("Server started in background successfully"),
21                Err(error) => {
22                    error!("Error starting server in background{COLON_SPACE}{error}")
23                }
24            };
25        } else {
26            info!("Server started successfully");
27            manager.start().await;
28        }
29    };
30    let stop_server = || async {
31        match manager.stop().await {
32            Ok(_) => info!("Server stopped successfully"),
33            Err(error) => error!("Error stopping server{COLON_SPACE}{error}"),
34        };
35    };
36    let restart_server = || async {
37        stop_server().await;
38        start_server().await;
39    };
40    if args.len() < 2 {
41        warn!("No additional command-line parameters, default startup");
42        start_server().await;
43        return;
44    }
45    let command: String = args[1].to_lowercase();
46    match command.as_str() {
47        CMD_STOP => stop_server().await,
48        CMD_RESTART => restart_server().await,
49        _ => {
50            error!("Invalid command{COLON_SPACE}{command}");
51        }
52    }
53}