use maelstrom_macro::Config;
use maelstrom_util::{
config::common::{
BrokerAddr, CacheSize, ClusterCommunicationStrategy, InlineLimit, LogLevel, Slots,
},
root::RootBuf,
};
use url::Url;
use xdg::BaseDirectories;
pub struct CacheDir;
#[derive(Config, Debug)]
pub struct Config {
#[config(
option,
short = 'b',
value_name = "SOCKADDR",
default = r#""no default, must be specified if cluster-communication-strategy is tcp (the default)""#
)]
pub broker: Option<BrokerAddr>,
#[config(value_name = "N", default = "Slots::default()")]
pub slots: Slots,
#[config(
value_name = "PATH",
default = r#"|bd: &BaseDirectories| {
bd.get_cache_home()
.into_os_string()
.into_string()
.unwrap()
}"#
)]
pub cache_root: RootBuf<CacheDir>,
#[config(value_name = "BYTES", default = "CacheSize::default()")]
pub cache_size: CacheSize,
#[config(value_name = "BYTES", default = "InlineLimit::default()")]
pub inline_limit: InlineLimit,
#[config(short = 'L', value_name = "LEVEL", default = r#""info""#)]
pub log_level: LogLevel,
#[config(
value_name = "CLUSTER_COMMUNICATION_STRATEGY",
default = r#""tcp""#,
hide
)]
pub cluster_communication_strategy: ClusterCommunicationStrategy,
#[config(
option,
value_name = "GITHUB_ACTIONS_TOKEN",
default = r#""no default, must be specified if cluster-communication-strategy is github""#,
hide
)]
pub github_actions_token: Option<String>,
#[config(
option,
value_name = "GITHUB_ACTIONS_URL",
default = r#""no default, must be specified if cluster-communication-strategy is github""#,
hide
)]
pub github_actions_url: Option<Url>,
}