#![allow(missing_docs)]
use aws_smithy_types::config_bag::{Storable, StoreReplace};
use std::time::Duration;
pub const DEFAULT_GRACE_PERIOD: Duration = Duration::from_secs(20);
#[derive(Clone, Debug)]
pub struct StalledStreamProtectionConfig {
upload_enabled: bool,
download_enabled: bool,
grace_period: Duration,
}
impl StalledStreamProtectionConfig {
pub fn enabled() -> Builder {
Builder {
upload_enabled: Some(true),
download_enabled: Some(true),
grace_period: None,
}
}
pub fn disabled() -> Self {
Self {
upload_enabled: false,
download_enabled: false,
grace_period: DEFAULT_GRACE_PERIOD,
}
}
pub fn is_enabled(&self) -> bool {
self.upload_enabled || self.download_enabled
}
pub fn upload_enabled(&self) -> bool {
self.upload_enabled
}
pub fn download_enabled(&self) -> bool {
self.download_enabled
}
pub fn grace_period(&self) -> Duration {
self.grace_period
}
}
#[derive(Clone, Debug)]
pub struct Builder {
upload_enabled: Option<bool>,
download_enabled: Option<bool>,
grace_period: Option<Duration>,
}
impl Builder {
pub fn grace_period(mut self, grace_period: Duration) -> Self {
self.grace_period = Some(grace_period);
self
}
pub fn set_grace_period(&mut self, grace_period: Option<Duration>) -> &mut Self {
self.grace_period = grace_period;
self
}
pub fn is_enabled(mut self, enabled: bool) -> Self {
self.set_is_enabled(Some(enabled));
self
}
pub fn set_is_enabled(&mut self, enabled: Option<bool>) -> &mut Self {
self.set_upload_enabled(enabled);
self.set_download_enabled(enabled);
self
}
pub fn upload_enabled(mut self, enabled: bool) -> Self {
self.set_upload_enabled(Some(enabled));
self
}
pub fn set_upload_enabled(&mut self, enabled: Option<bool>) -> &mut Self {
self.upload_enabled = enabled;
self
}
pub fn download_enabled(mut self, enabled: bool) -> Self {
self.set_download_enabled(Some(enabled));
self
}
pub fn set_download_enabled(&mut self, enabled: Option<bool>) -> &mut Self {
self.download_enabled = enabled;
self
}
pub fn build(self) -> StalledStreamProtectionConfig {
StalledStreamProtectionConfig {
upload_enabled: self.upload_enabled.unwrap_or_default(),
download_enabled: self.download_enabled.unwrap_or_default(),
grace_period: self.grace_period.unwrap_or(DEFAULT_GRACE_PERIOD),
}
}
}
impl From<StalledStreamProtectionConfig> for Builder {
fn from(config: StalledStreamProtectionConfig) -> Self {
Builder {
upload_enabled: Some(config.upload_enabled),
download_enabled: Some(config.download_enabled),
grace_period: Some(config.grace_period),
}
}
}
impl Storable for StalledStreamProtectionConfig {
type Storer = StoreReplace<Self>;
}