reactive_graph/
bin_all.rs

1pub mod all;
2#[cfg(feature = "client")]
3pub mod client;
4#[cfg(feature = "server")]
5pub mod server;
6pub mod shared;
7#[cfg(feature = "tooling")]
8pub mod tooling;
9
10use crate::all::args::AllInOneArguments;
11#[cfg(feature = "client")]
12use crate::client::client;
13#[cfg(feature = "server")]
14use crate::server::commands::ServerCommands;
15#[cfg(all(feature = "server", target_os = "linux"))]
16use crate::server::daemon::daemonize;
17#[cfg(feature = "server")]
18use crate::server::server;
19use crate::shared::completions::handle_completions;
20use crate::shared::info::handle_info_command;
21#[cfg(target_os = "linux")]
22use crate::shared::manpages::handle_man_pages;
23use crate::shared::markdown_help::handle_markdown_help;
24#[cfg(feature = "tooling")]
25use crate::tooling::tooling;
26use clap::Parser;
27use std::alloc::System;
28use std::process::exit;
29
30#[global_allocator]
31static ALLOCATOR: System = System;
32
33fn main() {
34    let args = AllInOneArguments::parse();
35
36    handle_markdown_help::<AllInOneArguments>(&args.shared.markdown_help);
37
38    #[cfg(target_os = "linux")]
39    handle_man_pages::<AllInOneArguments>(&args.shared.man_pages);
40
41    handle_completions::<AllInOneArguments>(&args.shared.completions);
42
43    handle_info_command(&args.shared.info);
44
45    #[cfg(feature = "tooling")]
46    if let Some(_commands) = &args.tooling.commands {
47        match tooling(args.tooling) {
48            Ok(_) => {
49                exit(0);
50            }
51            Err(e) => {
52                eprintln!("{e}");
53                exit(1);
54            }
55        }
56    }
57
58    #[cfg(feature = "client")]
59    if let Some(_commands) = &args.client.commands {
60        return client(args.client);
61    }
62
63    #[cfg(feature = "client")]
64    if args.interactive.unwrap_or_default() {
65        return client(args.client);
66    }
67
68    #[cfg(feature = "server")]
69    if let Some(commands) = &args.server.commands {
70        #[allow(unreachable_patterns)]
71        match commands {
72            #[cfg(target_os = "linux")]
73            ServerCommands::Daemon(args) => daemonize(args),
74            _ => {}
75        }
76        return server(args.server);
77    }
78
79    #[cfg(feature = "server")]
80    return server(args.server);
81
82    #[cfg(all(not(feature = "server"), feature = "client"))]
83    return client(args.client);
84}