interstice_sdk_core/
caps.rs1use interstice_abi::ReducerTableRef;
11
12pub trait CanRead<Row> {}
14pub trait CanInsert<Row> {}
16pub trait CanUpdate<Row> {}
18pub trait CanDelete<Row> {}
20
21pub trait ReducerCapPiece {
23 fn extend_reducer_schema(
24 reads: &mut Vec<ReducerTableRef>,
25 inserts: &mut Vec<ReducerTableRef>,
26 updates: &mut Vec<ReducerTableRef>,
27 deletes: &mut Vec<ReducerTableRef>,
28 );
29}
30
31pub trait ReducerCaps {
33 fn extend_reducer_schema(
34 reads: &mut Vec<ReducerTableRef>,
35 inserts: &mut Vec<ReducerTableRef>,
36 updates: &mut Vec<ReducerTableRef>,
37 deletes: &mut Vec<ReducerTableRef>,
38 );
39}
40
41impl ReducerCaps for () {
42 fn extend_reducer_schema(
43 _reads: &mut Vec<ReducerTableRef>,
44 _inserts: &mut Vec<ReducerTableRef>,
45 _updates: &mut Vec<ReducerTableRef>,
46 _deletes: &mut Vec<ReducerTableRef>,
47 ) {
48 }
49}
50
51impl<T: ReducerCapPiece> ReducerCaps for T {
52 fn extend_reducer_schema(
53 reads: &mut Vec<ReducerTableRef>,
54 inserts: &mut Vec<ReducerTableRef>,
55 updates: &mut Vec<ReducerTableRef>,
56 deletes: &mut Vec<ReducerTableRef>,
57 ) {
58 T::extend_reducer_schema(reads, inserts, updates, deletes);
59 }
60}
61
62impl<A: ReducerCaps, B: ReducerCaps> ReducerCaps for (A, B) {
63 fn extend_reducer_schema(
64 reads: &mut Vec<ReducerTableRef>,
65 inserts: &mut Vec<ReducerTableRef>,
66 updates: &mut Vec<ReducerTableRef>,
67 deletes: &mut Vec<ReducerTableRef>,
68 ) {
69 A::extend_reducer_schema(reads, inserts, updates, deletes);
70 B::extend_reducer_schema(reads, inserts, updates, deletes);
71 }
72}
73
74impl<A: ReducerCaps> ReducerCaps for (A,) {
75 fn extend_reducer_schema(
76 reads: &mut Vec<ReducerTableRef>,
77 inserts: &mut Vec<ReducerTableRef>,
78 updates: &mut Vec<ReducerTableRef>,
79 deletes: &mut Vec<ReducerTableRef>,
80 ) {
81 A::extend_reducer_schema(reads, inserts, updates, deletes);
82 }
83}
84
85pub trait QueryCapPiece {
87 fn extend_query_schema(reads: &mut Vec<ReducerTableRef>);
88}
89
90pub trait QueryCaps {
91 fn extend_query_schema(reads: &mut Vec<ReducerTableRef>);
92}
93
94impl QueryCaps for () {
95 fn extend_query_schema(_reads: &mut Vec<ReducerTableRef>) {}
96}
97
98impl<T: QueryCapPiece> QueryCaps for T {
99 fn extend_query_schema(reads: &mut Vec<ReducerTableRef>) {
100 T::extend_query_schema(reads);
101 }
102}
103
104impl<A: QueryCaps, B: QueryCaps> QueryCaps for (A, B) {
105 fn extend_query_schema(reads: &mut Vec<ReducerTableRef>) {
106 A::extend_query_schema(reads);
107 B::extend_query_schema(reads);
108 }
109}
110
111impl<A: QueryCaps> QueryCaps for (A,) {
112 fn extend_query_schema(reads: &mut Vec<ReducerTableRef>) {
113 A::extend_query_schema(reads);
114 }
115}
116
117macro_rules! impl_disjunctive_can {
119 ($trait:ident) => {
120 impl<Row, A> $trait<Row> for (A,) where A: $trait<Row> {}
121 };
122}
123
124impl_disjunctive_can!(CanRead);
125impl_disjunctive_can!(CanInsert);
126impl_disjunctive_can!(CanUpdate);
127impl_disjunctive_can!(CanDelete);