use crate::AcceptInvalidRemoteContainerTlsCerts;
use maelstrom_container::ContainerImageDepotDir;
use maelstrom_macro::Config;
use maelstrom_util::{
config::common::{BrokerAddr, CacheSize, ClusterCommunicationStrategy, InlineLimit, Slots},
root::RootBuf,
};
use url::Url;
use xdg::BaseDirectories;
#[derive(Config, Debug)]
pub struct Config {
#[config(
option,
short = 'b',
value_name = "SOCKADDR",
default = r#""standalone mode""#
)]
pub broker: Option<BrokerAddr>,
#[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>,
#[config(
value_name = "BYTES",
default = "CacheSize::default()",
next_help_heading = "Local Worker Config Values"
)]
pub cache_size: CacheSize,
#[config(value_name = "BYTES", default = "InlineLimit::default()")]
pub inline_limit: InlineLimit,
#[config(value_name = "N", default = "Slots::default()")]
pub slots: Slots,
#[config(
value_name = "PATH",
default = r#"|bd: &BaseDirectories| {
bd.get_cache_home()
.parent()
.unwrap()
.join("container/")
.into_os_string()
.into_string()
.unwrap()
}"#,
next_help_heading = "Container Image Config Values"
)]
pub container_image_depot_root: RootBuf<ContainerImageDepotDir>,
#[config(flag)]
pub accept_invalid_remote_container_tls_certs: AcceptInvalidRemoteContainerTlsCerts,
}