use crate::{
dto::{
component_registry::{
ComponentRuntimeActivationRequest, ComponentRuntimeDirectoryPreparationRequest,
ComponentRuntimeDirectorySynchronizationRequest, ComponentRuntimeStatusResponse,
},
error::Error,
role::ComponentRuntimeOperationStatus,
},
workflow::{component_runtime, runtime::fleet_activation::FleetActivationWorkflow},
};
pub struct ComponentRuntimeApi;
impl ComponentRuntimeApi {
pub fn configure(
request: ComponentRuntimeDirectoryPreparationRequest,
) -> Result<crate::view::fleet_activation::ComponentRuntimeActivationTransition, Error> {
component_runtime::configure(request).map_err(Error::from)
}
pub fn prepare_directory(
request: ComponentRuntimeDirectoryPreparationRequest,
) -> Result<ComponentRuntimeStatusResponse, Error> {
component_runtime::prepare_directory(request).map_err(Error::from)
}
pub fn status() -> Result<ComponentRuntimeStatusResponse, Error> {
component_runtime::status().map_err(Error::from)
}
pub fn operation_status(
operation_id: [u8; 32],
) -> Result<ComponentRuntimeOperationStatus, Error> {
let fleet_activation = FleetActivationWorkflow::status().map_err(Error::from)?;
let runtime = component_runtime::status().map_err(Error::from)?;
if fleet_activation.identity.operation_id != operation_id
|| runtime.operation_id != operation_id
{
return Err(Error::from_registered(
crate::diagnostics::codes::STATE_CONFLICT,
));
}
Ok(ComponentRuntimeOperationStatus {
operation_id,
fleet_activation,
runtime,
})
}
pub fn synchronize_directory(
request: ComponentRuntimeDirectorySynchronizationRequest,
) -> Result<ComponentRuntimeStatusResponse, Error> {
component_runtime::synchronize_directory(request).map_err(Error::from)
}
pub fn activate(
request: ComponentRuntimeActivationRequest,
) -> Result<crate::view::fleet_activation::ComponentRuntimeActivationTransition, Error> {
component_runtime::activate(request).map_err(Error::from)
}
}