use crate::core::sync::AsyncRwLock;
use crate::syslog::LogSystemEvent;
use async_trait::async_trait;
use reduct_base::error::ReductError;
use reduct_base::msg::lifecycle_api::{
FullLifecycleInfo, LifecycleInfo, LifecycleMode, LifecycleSettings,
};
use std::sync::Arc;
mod action;
mod lifecycle_repository;
mod lifecycle_task;
pub(crate) mod system_event_payload;
#[derive(Clone)]
pub struct SystemEventSink {
pub(crate) system_logger: Arc<AsyncRwLock<Box<dyn LogSystemEvent + Send + Sync>>>,
pub(crate) instance_name: String,
}
#[async_trait]
pub trait ManageLifecycles {
async fn create_lifecycle(
&mut self,
name: &str,
settings: LifecycleSettings,
) -> Result<(), ReductError>;
async fn update_lifecycle(
&mut self,
name: &str,
settings: LifecycleSettings,
) -> Result<(), ReductError>;
async fn lifecycles(&self) -> Result<Vec<LifecycleInfo>, ReductError>;
async fn get_info(&self, name: &str) -> Result<FullLifecycleInfo, ReductError>;
async fn get_lifecycle_settings(&self, name: &str) -> Result<LifecycleSettings, ReductError>;
async fn is_lifecycle_running(&self, name: &str) -> Result<bool, ReductError>;
async fn set_mode(&mut self, name: &str, mode: LifecycleMode) -> Result<(), ReductError>;
async fn set_lifecycle_provisioned(
&mut self,
name: &str,
provisioned: bool,
) -> Result<(), ReductError>;
async fn remove_lifecycle(&mut self, name: &str) -> Result<(), ReductError>;
async fn start(&mut self) -> Result<(), ReductError>;
async fn stop(&mut self);
}
pub(crate) use lifecycle_repository::LifecycleRepoBuilder;