1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
// // use std::sync::Arc;
// // use dashmap::DashMap;
// // use parking_lot::RwLock;
// // use crate::{error::Error, graph::Graph, Resolver, Schema};
// use crate::{Applicator, Extensions, Graph, Injectable, Result, Value};
// use parking_lot::RwLock;
// use std::sync::Arc;
// struct Layer<T: Clone + Send + Sync + 'static>(T);
// #[derive(Clone)]
// pub struct Interrogator {
// // schemas: Arc<DashMap<String, Schema>>,
// extensions: Arc<RwLock<Extensions>>,
// graph: Arc<RwLock<Graph>>,
// // resolver: Arc<dyn Resolver>,
// // applicators: Arc<RwLock<dyn Fn(&Schema) -> Arc<dyn FnOnce(&mut Schema) -> Result<(), Error>>>>,
// }
// // impl<R> Interrogator {}
// impl Interrogator {
// pub fn new() -> Self {
// Interrogator {
// extensions: Arc::new(RwLock::new(Extensions::new())),
// graph: Arc::new(RwLock::new(Graph::new(&[]).unwrap())),
// // resolver: Arc::new(RwLock::new(Resolver::new())),
// // applicators: Arc::new(RwLock::new(Applicators::new())),
// }
// }
// pub fn context<T>(&mut self, ctx: T)
// where
// T: Send + Sync + Clone + 'static,
// {
// let mut exts = self.extensions.write();
// exts.insert(Layer(ctx));
// }
// /// temp method to see if this will execute
// pub fn call<A, V>(&self, run: A)
// where
// A: Applicator<V>,
// {
// let bf = run.setup(self.clone());
// }
// /// Provides
// pub fn resolve<I, T>(&self) -> I
// where
// T: Clone + Send + Sync + 'static,
// I: Injectable<Value = T>,
// {
// let exts = self.extensions.write();
// let layer = exts.get::<Layer<T>>();
// if layer.is_none() {
// // TODO: error
// panic!("layer not found")
// }
// I::from(layer.unwrap().0.clone())
// }
// }