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