use std::sync::{Mutex, MutexGuard, OnceLock};
use prost::bytes::Buf;
use prost_types::FileDescriptorProto;
use crate::{DescriptorError, DescriptorPool};
static INSTANCE: OnceLock<Mutex<DescriptorPool>> = OnceLock::new();
fn instance() -> MutexGuard<'static, DescriptorPool> {
INSTANCE
.get_or_init(|| Mutex::new(crate::reflect::make_wkt_descriptor_pool().unwrap()))
.lock()
.unwrap()
}
impl DescriptorPool {
pub fn global() -> DescriptorPool {
instance().clone()
}
pub fn decode_global_file_descriptor_set<B>(bytes: B) -> Result<(), DescriptorError>
where
B: Buf,
{
instance().decode_file_descriptor_set(bytes)?;
Ok(())
}
pub fn add_global_file_descriptor_proto(
file: FileDescriptorProto,
) -> Result<(), DescriptorError> {
instance().add_file_descriptor_proto(file)?;
Ok(())
}
}