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