restxst 0.0.1

REST-first end-to-end / black-box API testing for Rust
Documentation
use dashmap::DashMap;
use std::any::{Any, TypeId};
use std::sync::Arc;

#[derive(Debug, Default, Clone)]
pub struct Resources {
    inner: DashMap<TypeId, Arc<dyn Any + Send + Sync>>,
}

impl Resources {
    pub fn new() -> Self {
        Self {
            inner: DashMap::new(),
        }
    }

    pub fn insert<T: Any + Send + Sync>(&self, value: T) -> &Self {
        self.inner.insert(TypeId::of::<T>(), Arc::new(value));
        self
    }

    pub fn insert_arc<T: Any + Send + Sync>(&self, value: Arc<T>) -> &Self {
        self.inner.insert(TypeId::of::<Arc<T>>(), Arc::new(value));
        self
    }

    pub fn get<T: Any + Send + Sync>(&self) -> Option<Arc<T>> {
        let value = self.inner.get(&TypeId::of::<T>())?;
        Arc::clone(value.value()).downcast::<T>().ok()
    }

    pub fn get_arc<T: Any + Send + Sync>(&self) -> Option<Arc<T>> {
        let value = self.inner.get(&TypeId::of::<Arc<T>>())?;
        let value = Arc::clone(value.value()).downcast::<Arc<T>>().ok()?;
        Some((*value).clone())
    }
}