lexer/
readers_builder.rs

1use alloc::boxed::Box;
2use alloc::vec::Vec;
3
4use super::{Reader, Readers};
5
6pub struct ReadersBuilder<T, E>(pub(crate) Vec<Box<dyn Reader<T, E>>>);
7
8unsafe impl<T, E> Sync for ReadersBuilder<T, E>
9where
10  T: Sync,
11  E: Sync,
12{
13}
14unsafe impl<T, E> Send for ReadersBuilder<T, E>
15where
16  T: Send,
17  E: Send,
18{
19}
20
21impl<T, E> ReadersBuilder<T, E> {
22  #[inline]
23  pub fn new() -> Self {
24    ReadersBuilder(Vec::new())
25  }
26
27  #[inline]
28  pub fn add<R: 'static + Reader<T, E>>(mut self, reader: R) -> Self {
29    self.0.push(Box::new(reader));
30    self
31  }
32
33  #[inline]
34  pub fn build(self) -> Readers<T, E> {
35    Readers::from(self)
36  }
37}