Mountain/RunTime/Execute/
RunWithTimeout.rs1
2use std::sync::Arc;
7
8use CommonLibrary::{
9 Effect::{ActionEffect::ActionEffect, ApplicationRunTime::ApplicationRunTime as ApplicationRunTimeTrait},
10 Environment::Requires::Requires,
11 Error::CommonError::CommonError,
12};
13
14use crate::RunTime::ApplicationRunTime::ApplicationRunTime;
15
16impl ApplicationRunTime {
17 pub async fn RunWithTimeout<TCapabilityProvider, TError, TOutput>(
18 &self,
19
20 Effect:ActionEffect<Arc<TCapabilityProvider>, TError, TOutput>,
21
22 Timeout:std::time::Duration,
23 ) -> Result<TOutput, TError>
24 where
25 TCapabilityProvider: ?Sized + Send + Sync + 'static,
26 <Self as CommonLibrary::Environment::HasEnvironment::HasEnvironment>::EnvironmentType:
27 Requires<TCapabilityProvider>,
28 TError: From<CommonError> + Send + Sync + 'static,
29 TOutput: Send + Sync + 'static, {
30 tokio::time::timeout(Timeout, ApplicationRunTimeTrait::Run(self, Effect))
31 .await
32 .map_err(|_| {
33 CommonError::Unknown { Description:format!("Effect execution timed out after {:?}", Timeout) }.into()
34 })?
35 }
36}