reth_node_core/args/
datadir_args.rs

1//! clap [Args](clap::Args) for datadir config
2
3use crate::dirs::{ChainPath, DataDirPath, MaybePlatformPath};
4use clap::Args;
5use reth_chainspec::Chain;
6use std::path::PathBuf;
7
8/// Parameters for datadir configuration
9#[derive(Debug, Args, PartialEq, Eq, Default, Clone)]
10#[command(next_help_heading = "Datadir")]
11pub struct DatadirArgs {
12    /// The path to the data dir for all reth files and subdirectories.
13    ///
14    /// Defaults to the OS-specific data directory:
15    ///
16    /// - Linux: `$XDG_DATA_HOME/reth/` or `$HOME/.local/share/reth/`
17    /// - Windows: `{FOLDERID_RoamingAppData}/reth/`
18    /// - macOS: `$HOME/Library/Application Support/reth/`
19    #[arg(long, value_name = "DATA_DIR", verbatim_doc_comment, default_value_t)]
20    pub datadir: MaybePlatformPath<DataDirPath>,
21
22    /// The absolute path to store static files in.
23    #[arg(
24        long = "datadir.static-files",
25        alias = "datadir.static_files",
26        value_name = "PATH",
27        verbatim_doc_comment
28    )]
29    pub static_files_path: Option<PathBuf>,
30
31    /// The absolute path to store `RocksDB` database in.
32    #[arg(long = "datadir.rocksdb", value_name = "PATH", verbatim_doc_comment)]
33    pub rocksdb_path: Option<PathBuf>,
34
35    /// The absolute path to store pprof dumps in.
36    #[arg(long = "datadir.pprof-dumps", value_name = "PATH", verbatim_doc_comment)]
37    pub pprof_dumps_path: Option<PathBuf>,
38}
39
40impl DatadirArgs {
41    /// Resolves the final datadir path.
42    pub fn resolve_datadir(self, chain: Chain) -> ChainPath<DataDirPath> {
43        let datadir = self.datadir.clone();
44        datadir.unwrap_or_chain_default(chain, self)
45    }
46}
47
48#[cfg(test)]
49mod tests {
50    use super::*;
51    use clap::Parser;
52
53    /// A helper type to parse Args more easily
54    #[derive(Parser)]
55    struct CommandParser<T: Args> {
56        #[command(flatten)]
57        args: T,
58    }
59
60    #[test]
61    fn test_parse_datadir_args() {
62        let default_args = DatadirArgs::default();
63        let args = CommandParser::<DatadirArgs>::parse_from(["reth"]).args;
64        assert_eq!(args, default_args);
65    }
66}