#![deny(non_snake_case)] use mssf_com::FabricRuntime::IFabricStatelessServicePartition;
use tokio_util::sync::CancellationToken;
use windows_core::HSTRING;
use crate::types::ServicePartitionInformation;
pub struct StatelessServicePartition {
com_impl: IFabricStatelessServicePartition,
}
impl StatelessServicePartition {
pub fn new(com_impl: IFabricStatelessServicePartition) -> StatelessServicePartition {
StatelessServicePartition { com_impl }
}
pub fn get_partition_info(&self) -> ::windows_core::Result<ServicePartitionInformation> {
let raw = unsafe { self.com_impl.GetPartitionInfo() }?;
let raw_ref = unsafe { raw.as_ref().unwrap() };
assert!(!raw.is_null());
Ok(raw_ref.into())
}
}
pub trait StatelessServiceFactory {
fn create_instance(
&self,
servicetypename: &HSTRING,
servicename: &HSTRING,
initializationdata: &[u8],
partitionid: &::windows::core::GUID,
instanceid: i64,
) -> windows_core::Result<impl StatelessServiceInstance>;
}
#[trait_variant::make(StatelessServiceInstance: Send)]
pub trait LocalStatelessServiceInstance: Send + Sync + 'static {
async fn open(
&self,
partition: &StatelessServicePartition,
cancellation_token: CancellationToken,
) -> windows::core::Result<HSTRING>;
async fn close(&self, cancellation_token: CancellationToken) -> windows::core::Result<()>;
fn abort(&self);
}