pub struct PluginContext {
pub local_state: HashMap<String, Value>,
pub global_state: HashMap<String, Value>,
}Expand description
Per-plugin, per-invocation execution context.
Each plugin receives its own PluginContext with:
local_state— private to this plugin, this invocation. Fresh each time. Used for per-plugin counters, caches, scratch data.global_state— shared across all plugins in a pipeline. The executor merges changes back after serial phases so subsequent plugins see contributions from earlier ones.
All data needed for policy evaluation (identity, tenant, request metadata) comes from the payload’s extensions, capability-gated per plugin. Context is purely for transient execution state.
PluginContext
├── local_state: HashMap # Per-plugin, per-request. Private.
└── global_state: HashMap # Shared across plugins. Use with care.Fields§
§local_state: HashMap<String, Value>Plugin-local state. Private to this plugin, this invocation.
global_state: HashMap<String, Value>Shared state across all plugins in the pipeline. The executor merges changes back after each serial-phase plugin.
Implementations§
Source§impl PluginContext
impl PluginContext
Sourcepub fn with_global_state(global_state: HashMap<String, Value>) -> Self
pub fn with_global_state(global_state: HashMap<String, Value>) -> Self
Create a plugin context with pre-populated global state.
Sourcepub fn get_global(&self, key: &str) -> Option<&Value>
pub fn get_global(&self, key: &str) -> Option<&Value>
Get a value from global state.
Examples found in repository?
examples/plugin_demo.rs (line 137)
129 async fn handle(
130 &self,
131 payload: &ToolInvokePayload,
132 _extensions: &Extensions,
133 ctx: &mut PluginContext,
134 ) -> PluginResult<ToolInvokePayload> {
135 // Check if the user has PII clearance (simulated via context)
136 let has_clearance = ctx
137 .get_global("pii_clearance")
138 .and_then(|v| v.as_bool())
139 .unwrap_or(false);
140
141 if !has_clearance {
142 println!(
143 " [pii-guard] DENIED: user '{}' lacks PII clearance for '{}'",
144 payload.user, payload.tool_name
145 );
146 return PluginResult::deny(PluginViolation::new(
147 "pii_access_denied",
148 "PII clearance required",
149 ));
150 }
151
152 println!(
153 " [pii-guard] OK: user '{}' has PII clearance",
154 payload.user
155 );
156 PluginResult::allow()
157 }Sourcepub fn set_global(&mut self, key: impl Into<String>, value: Value)
pub fn set_global(&mut self, key: impl Into<String>, value: Value)
Set a value in global state.
Trait Implementations§
Source§impl Clone for PluginContext
impl Clone for PluginContext
Source§fn clone(&self) -> PluginContext
fn clone(&self) -> PluginContext
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for PluginContext
impl Debug for PluginContext
Source§impl Default for PluginContext
impl Default for PluginContext
Source§impl<'de> Deserialize<'de> for PluginContext
impl<'de> Deserialize<'de> for PluginContext
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Auto Trait Implementations§
impl Freeze for PluginContext
impl RefUnwindSafe for PluginContext
impl Send for PluginContext
impl Sync for PluginContext
impl Unpin for PluginContext
impl UnsafeUnpin for PluginContext
impl UnwindSafe for PluginContext
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more