reth_seismic_node/
args.rs

1//! clap [Args](clap::Args) for RPC related arguments.
2
3use std::net::IpAddr;
4
5use clap::Args;
6use seismic_enclave::{ENCLAVE_DEFAULT_ENDPOINT_IP, ENCLAVE_DEFAULT_ENDPOINT_PORT};
7
8/// Parameters for configuring the enclave more granularity via CLI
9#[derive(Debug, Clone, Args, PartialEq, Eq, Copy)]
10#[command(next_help_heading = "Enclave")]
11pub struct EnclaveArgs {
12    /// Auth server address to listen on
13    #[arg(long = "enclave.endpoint-addr", default_value_t = ENCLAVE_DEFAULT_ENDPOINT_IP)]
14    pub enclave_server_addr: IpAddr,
15
16    /// Auth server port to listen on
17    #[arg(long = "enclave.endpoint-port", default_value_t = ENCLAVE_DEFAULT_ENDPOINT_PORT)]
18    pub enclave_server_port: u16,
19
20    /// Spin up mock server for testing purpose
21    #[arg(long = "enclave.mock-server", action = clap::ArgAction::SetTrue)]
22    pub mock_server: bool,
23
24    /// Enclave client timeout
25    #[arg(long = "enclave.timeout", default_value_t = 5)]
26    pub enclave_timeout: u64,
27}
28
29impl Default for EnclaveArgs {
30    fn default() -> Self {
31        Self {
32            enclave_server_addr: ENCLAVE_DEFAULT_ENDPOINT_IP,
33            enclave_server_port: ENCLAVE_DEFAULT_ENDPOINT_PORT,
34            mock_server: false,
35            enclave_timeout: 5,
36        }
37    }
38}
39
40#[cfg(test)]
41mod tests {
42    use super::*;
43    use clap::{Args, Parser};
44
45    /// A helper type to parse Args more easily
46    #[derive(Parser)]
47    struct CommandParser<T: Args> {
48        #[command(flatten)]
49        args: T,
50    }
51
52    #[test]
53    fn test_enclave_args_parser() {
54        let args = CommandParser::<EnclaveArgs>::parse_from(["reth node"]).args;
55
56        let addr = args.enclave_server_addr;
57        let port = args.enclave_server_port;
58        let mock = args.mock_server;
59
60        assert_eq!(port, ENCLAVE_DEFAULT_ENDPOINT_PORT);
61        assert_eq!(addr, ENCLAVE_DEFAULT_ENDPOINT_IP);
62        assert_eq!(mock, false);
63    }
64}