#![deny(non_snake_case)]
use std::sync::Arc;
use crate::WString;
use crate::runtime::executor::BoxedCancelToken;
use crate::types::ServicePartitionInformation;
pub trait IStatelessServiceFactory: Send + Sync + 'static {
fn create_instance(
&self,
servicetypename: WString,
servicename: crate::types::Uri,
initializationdata: &[u8],
partitionid: crate::GUID,
instanceid: i64,
) -> crate::Result<Box<dyn IStatelessServiceInstance>>;
}
#[async_trait::async_trait]
pub trait IStatelessServiceInstance: Send + Sync + 'static {
async fn open(
&self,
partition: Arc<dyn IStatelessServicePartition>,
cancellation_token: BoxedCancelToken,
) -> crate::Result<WString>;
async fn close(&self, cancellation_token: BoxedCancelToken) -> crate::Result<()>;
fn abort(&self);
}
pub trait IStatelessServicePartition: Send + Sync + 'static {
fn get_partition_info(&self) -> crate::Result<ServicePartitionInformation>;
fn report_load(&self, metrics: &[crate::types::LoadMetric]) -> crate::Result<()>;
fn report_fault(&self, fault_type: crate::types::FaultType) -> crate::Result<()>;
fn report_move_cost(&self, move_cost: crate::types::MoveCost) -> crate::Result<()>;
fn report_partition_health(
&self,
health_info: &crate::types::HealthInformation,
) -> crate::Result<()>;
fn report_instance_health(
&self,
health_info: &crate::types::HealthInformation,
) -> crate::Result<()>;
}