use std::time::Duration;
use indexmap::IndexMap;
use typed_builder::TypedBuilder;
use crate::{Network, Volume};
#[derive(Debug, Clone, TypedBuilder)]
#[builder(field_defaults(default, setter(prefix = "with_")))]
pub struct RunOption {
#[builder(default = Duration::from_millis(500))]
pub(super) wait_interval: Duration,
pub(super) remove: bool,
#[builder(setter(into, strip_option))]
pub(super) name: Option<String>,
#[builder(default, setter(into))]
pub(crate) network: Option<Network>,
#[builder(default, setter(transform = |args: impl IntoIterator<Item = impl Into<Volume>>| args.into_iter().map(Into::into).collect()))]
pub(crate) volumes: Vec<Volume>,
#[builder(setter(transform = |args: impl IntoIterator<Item = (impl Into<String>, impl Into<String>)>| args.into_iter().map(|(key, value)| (key.into(), value.into())).collect()))]
pub(crate) env: IndexMap<String, String>,
#[builder(default, setter(transform = |args: impl IntoIterator<Item = impl Into<String>>| Some(args.into_iter().map(Into::into).collect())))]
pub(crate) command: Option<Vec<String>>,
#[builder(default, setter(into, strip_option))]
pub(crate) entrypoint: Option<String>,
}
impl RunOption {
#[must_use]
pub fn remove(&self) -> bool {
self.remove
}
#[must_use]
pub fn name(&self) -> Option<&str> {
self.name.as_deref()
}
}
impl Default for RunOption {
fn default() -> Self {
RunOption::builder().build()
}
}