1use crate::{Ref, Value};
2
3#[cfg_attr(feature = "async", maybe_impl::traits(Send, Sync))]
5pub trait Options<T: Value> {
6 fn value(&self) -> Ref<T>;
8}
9
10pub fn create<T: Value>(options: T) -> impl Options<T> {
16 OptionsWrapper(Ref::new(options))
17}
18
19struct OptionsWrapper<T: Value>(Ref<T>);
20
21impl<T: Value> Options<T> for OptionsWrapper<T> {
22 fn value(&self) -> Ref<T> {
23 self.0.clone()
24 }
25}
26
27unsafe impl<T: Send + Sync> Send for OptionsWrapper<T> {}
28unsafe impl<T: Send + Sync> Sync for OptionsWrapper<T> {}