reactive_graph/
bin_all.rs1pub 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}