hyperstack_interpreter/
runtime_resolvers_factory.rs1use std::sync::{Arc, OnceLock};
2
3use crate::runtime_resolvers::{InProcessResolver, SharedRuntimeResolver};
4
5pub type ResolverBuildError = Box<dyn std::error::Error + Send + Sync>;
6pub type ResolverFactory =
7 Box<dyn Fn() -> Result<SharedRuntimeResolver, ResolverBuildError> + Send + Sync>;
8
9static FACTORY: OnceLock<ResolverFactory> = OnceLock::new();
10
11pub fn set_resolver_factory(factory: ResolverFactory) {
16 if FACTORY.set(factory).is_err() {
17 tracing::warn!(
18 "set_resolver_factory called after a factory was already registered; \
19 subsequent registration ignored"
20 );
21 }
22}
23
24pub fn build_resolver() -> Result<SharedRuntimeResolver, ResolverBuildError> {
27 if let Some(factory) = FACTORY.get() {
28 return factory();
29 }
30 Ok(Arc::new(InProcessResolver::from_env()?))
31}