use std::time::Duration;
use crate::Command;
use super::{Chainable, Effects, Op, Operation, Safety};
#[derive(Clone, Debug)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct Pause {
#[cfg_attr(
feature = "serde",
serde(
rename = "seconds",
serialize_with = "crate::plan::wire::seconds",
deserialize_with = "crate::plan::wire::parse_seconds"
)
)]
#[cfg_attr(feature = "schema", schemars(rename = "seconds", with = "f64"))]
duration: Duration,
}
impl Pause {
#[must_use]
pub const fn new(duration: Duration) -> Self {
Self { duration }
}
#[must_use]
pub const fn duration(&self) -> Duration {
self.duration
}
pub(crate) fn render(&self) -> Command {
Command::new("run-shell")
.arg("-d")
.arg(self.duration.as_secs_f64().to_string())
}
}
operation!(
Pause,
creates = (),
effects = Effects {
read_only: true,
idempotent: true,
..Effects::MUTATING
},
safety = Safety::ReadOnly,
chainable
);