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
//! Defines the types for adding multiple pipelines into a `PipelineSet` and retaining a handle to
//! each pipeline for constructing a `PipelineHandleChain`.

use borrow_bag::BorrowBag;
use std::sync::Arc;

/// Represents the set of all `Pipeline` instances that are available for use when building a
/// `Router`. A `PipelineSet` is "frozen".
pub type PipelineSet<P> = Arc<BorrowBag<P>>;

/// A set of `Pipeline` instances that is currently being defined, and can have more `Pipeline`
/// instances added.
pub type EditablePipelineSet<P> = BorrowBag<P>;

/// Create an empty set of `Pipeline` instances.
///
/// See BorrowBag#add to insert new `Pipeline` instances.
pub fn new_pipeline_set() -> EditablePipelineSet<()> {
    BorrowBag::new()
}

/// Wraps the current set of `Pipeline` instances into a thread-safe reference counting pointer for
/// use with the `Router`.
pub fn finalize_pipeline_set<P>(eps: EditablePipelineSet<P>) -> PipelineSet<P> {
    Arc::new(eps)
}