use std::sync::{Arc, Mutex};
use crate::prelude::*;
pub type BrokerFactoryFunction = fn(CoreBrokerPtr) -> JuizResult<Arc<Mutex<dyn BrokerFactory>>>;
pub type BrokerProxyFactoryFunction = fn() -> JuizResult<Arc<Mutex<dyn BrokerProxyFactory>>>;
static BUILTIN_BROKER_FACTORIES: Mutex<Vec<(BrokerFactoryFunction, BrokerProxyFactoryFunction)>> =
Mutex::new(Vec::new());
pub fn register_builtin_broker_factory(
broker_factory: BrokerFactoryFunction,
broker_proxy_factory: BrokerProxyFactoryFunction,
) {
BUILTIN_BROKER_FACTORIES
.lock()
.unwrap_or_else(|e| e.into_inner())
.push((broker_factory, broker_proxy_factory));
}
pub(crate) fn builtin_broker_factories() -> Vec<(BrokerFactoryFunction, BrokerProxyFactoryFunction)>
{
BUILTIN_BROKER_FACTORIES
.lock()
.unwrap_or_else(|e| e.into_inner())
.clone()
}