ruice/
singleton.rs

1use std::sync::Arc;
2
3use crate::{Resolve, Services};
4
5pub struct Singleton<S> {
6    service: Arc<S>,
7}
8
9impl<S> Singleton<S> {
10    pub fn new(service: S) -> Self {
11        Self {
12            service: Arc::new(service),
13        }
14    }
15}
16
17impl<S, C> Resolve<S, C> for Singleton<S>
18where
19    S: Send + Sync,
20{
21    fn resolve(&self, _container: &C) -> Option<Arc<S>> {
22        Some(Arc::clone(&self.service))
23    }
24}
25
26pub trait SingletonServices: Services {
27    fn singleton<S>(&mut self, service: S)
28    where
29        S: Send + Sync + 'static,
30    {
31        self.put(Singleton::new(service));
32    }
33}
34
35impl<C> SingletonServices for C where C: Services {}