@@ -4,17 +4,26 @@ use std::{marker::PhantomData, sync::Arc};
4
4
#[ derive( Debug ) ]
5
5
pub struct DisrustorBuilder { }
6
6
7
- pub struct WithDataProvider < D : DataProvider < T > , T > {
7
+ pub struct WithDataProvider < D : DataProvider < T > , T >
8
+ where
9
+ T : Send + Sync ,
10
+ {
8
11
data_provider : Arc < D > ,
9
12
_element : PhantomData < T > ,
10
13
}
11
14
12
- pub struct WithWaitStrategy < W : WaitStrategy , D : DataProvider < T > , T > {
15
+ pub struct WithWaitStrategy < W : WaitStrategy , D : DataProvider < T > , T >
16
+ where
17
+ T : Send + Sync ,
18
+ {
13
19
with_data_provider : WithDataProvider < D , T > ,
14
20
_wait_strategy : PhantomData < W > ,
15
21
}
16
22
17
- pub struct WithSequencer < S : Sequencer , W : WaitStrategy , D : DataProvider < T > , T > {
23
+ pub struct WithSequencer < S : Sequencer , W : WaitStrategy , D : DataProvider < T > , T >
24
+ where
25
+ T : Send + Sync ,
26
+ {
18
27
with_wait_strategy : WithWaitStrategy < W , D , T > ,
19
28
sequencer : S ,
20
29
}
@@ -28,27 +37,39 @@ pub struct BarrierScope<'a, S: Sequencer, D: DataProvider<T>, T> {
28
37
_element : PhantomData < T > ,
29
38
}
30
39
31
- pub struct WithEventHandlers < ' a , S : Sequencer , W : WaitStrategy , D : DataProvider < T > , T > {
40
+ pub struct WithEventHandlers < ' a , S : Sequencer , W : WaitStrategy , D : DataProvider < T > , T >
41
+ where
42
+ T : Send + Sync ,
43
+ {
32
44
with_sequencer : WithSequencer < S , W , D , T > ,
33
45
event_handlers : Vec < Box < dyn Runnable + ' a > > ,
34
46
gating_sequences : Vec < Arc < AtomicSequence > > ,
35
47
}
36
48
37
49
impl DisrustorBuilder {
38
50
#[ allow( clippy:: new_ret_no_self) ]
39
- pub fn new < D : DataProvider < T > , T > ( data_provider : Arc < D > ) -> WithDataProvider < D , T > {
51
+ pub fn new < D : DataProvider < T > , T > ( data_provider : Arc < D > ) -> WithDataProvider < D , T >
52
+ where
53
+ T : Send + Sync ,
54
+ {
40
55
WithDataProvider {
41
56
data_provider,
42
57
_element : Default :: default ( ) ,
43
58
}
44
59
}
45
60
46
- pub fn with_ring_buffer < T : Default > ( capacity : usize ) -> WithDataProvider < RingBuffer < T > , T > {
61
+ pub fn with_ring_buffer < T : Default > ( capacity : usize ) -> WithDataProvider < RingBuffer < T > , T >
62
+ where
63
+ T : Send + Sync ,
64
+ {
47
65
Self :: new ( Arc :: new ( RingBuffer :: new ( capacity) ) )
48
66
}
49
67
}
50
68
51
- impl < D : DataProvider < T > , T > WithDataProvider < D , T > {
69
+ impl < D : DataProvider < T > , T > WithDataProvider < D , T >
70
+ where
71
+ T : Send + Sync ,
72
+ {
52
73
pub fn with_wait_strategy < W : WaitStrategy > ( self ) -> WithWaitStrategy < W , D , T > {
53
74
WithWaitStrategy {
54
75
with_data_provider : self ,
@@ -65,7 +86,10 @@ impl<D: DataProvider<T>, T> WithDataProvider<D, T> {
65
86
}
66
87
}
67
88
68
- impl < W : WaitStrategy , D : DataProvider < T > , T > WithWaitStrategy < W , D , T > {
89
+ impl < W : WaitStrategy , D : DataProvider < T > , T > WithWaitStrategy < W , D , T >
90
+ where
91
+ T : Send + Sync ,
92
+ {
69
93
pub fn with_sequencer < S : Sequencer > ( self , sequencer : S ) -> WithSequencer < S , W , D , T > {
70
94
WithSequencer {
71
95
with_wait_strategy : self ,
@@ -84,7 +108,7 @@ impl<W: WaitStrategy, D: DataProvider<T>, T> WithWaitStrategy<W, D, T> {
84
108
}
85
109
}
86
110
87
- impl < ' a , S : Sequencer + ' a , W : WaitStrategy , D : DataProvider < T > + ' a , T : Send + ' a >
111
+ impl < ' a , S : Sequencer + ' a , W : WaitStrategy , D : DataProvider < T > + ' a , T : Send + Sync + ' a >
88
112
WithSequencer < S , W , D , T >
89
113
{
90
114
pub fn with_barrier (
@@ -154,7 +178,7 @@ impl<'a, S: Sequencer + 'a, D: DataProvider<T> + 'a, T: Send + 'a> BarrierScope<
154
178
}
155
179
}
156
180
157
- impl < ' a , S : Sequencer + ' a , W : WaitStrategy , D : DataProvider < T > + ' a , T : Send + ' a >
181
+ impl < ' a , S : Sequencer + ' a , W : WaitStrategy , D : DataProvider < T > + ' a , T : Send + Sync + ' a >
158
182
WithEventHandlers < ' a , S , W , D , T >
159
183
{
160
184
pub fn with_barrier ( mut self , f : impl FnOnce ( & mut BarrierScope < ' a , S , D , T > ) ) -> Self {
0 commit comments