Skip to main content

sword_core/
interceptor.rs

1use crate::{Build, State, sword_error};
2
3/// Base trait for all interceptors in Sword.
4/// Implement this trait to create interceptors that can be automatically
5/// registered and built via the dependency injection system.
6///
7/// This means that the interceptor can have dependencies injected into it,
8/// and also be stored one time and reused  throughout the application lifecycle.
9pub trait Interceptor: Build {
10    fn register(state: &State) {
11        let interceptor = Self::build(state).unwrap_or_else(|err| {
12            sword_error! {
13                title: "Failed to build interceptor",
14                reason: err,
15                context: {
16                    "source" => "Interceptor::register",
17                },
18                hints: ["Ensure interceptor dependencies are registered in the DI container"],
19            }
20        });
21
22        state.insert(interceptor);
23    }
24}
25
26pub struct InterceptorRegistrar {
27    pub register: fn(&State),
28}
29
30inventory::collect!(InterceptorRegistrar);