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
// SPDX-License-Identifier: MIT
// Copyright (c) 2026 Praxis Contributors
//! Pipeline extension trait for injecting pipeline-scoped resources
//! into per-request [`RequestExtensions`].
//!
//! External filter crates (e.g. AI filters) implement this trait to
//! attach pipeline-level singletons (stores, registries, caches) that
//! their filters retrieve via [`RequestExtensions::get`] during
//! request processing.
//!
//! [`RequestExtensions`]: crate::RequestExtensions
use crateRequestExtensions;
// ---------------------------------------------------------------------------
// PipelineExtension Trait
// ---------------------------------------------------------------------------
/// Injects pipeline-scoped resources into per-request extensions.
///
/// Implementations are registered after pipeline construction via
/// [`FilterPipeline::add_pipeline_extension`] and called once per
/// request from [`FilterPipeline::prepare_extensions`].
///
/// ```ignore
/// use praxis_filter::{PipelineExtension, RequestExtensions};
///
/// #[derive(Clone)]
/// struct MyRegistry { /* ... */ }
///
/// impl PipelineExtension for MyRegistry {
/// fn prepare(&self, extensions: &mut RequestExtensions) {
/// extensions.insert(self.clone());
/// }
/// }
/// ```
///
/// [`FilterPipeline::add_pipeline_extension`]: crate::FilterPipeline::add_pipeline_extension
/// [`FilterPipeline::prepare_extensions`]: crate::FilterPipeline::prepare_extensions