Getting started Community Training Tutorials Documentation APIs, AI & Tools
pub trait PropertyAccessor {
fn read_property(&self, path: &[&str]) -> Option<Bytes>;
fn set_property(&self, path: &[&str], value: Option<&[u8]>);
}
Sharing Data Between Policies
Sharing Data Between Policies
You're viewing an older version of the documentation. You can switch to the latest version or use the version selector in the left navigation.
The StreamProperties injectable provides an interface to:
Consume properties set by other policies that are processing the same request.
Broadcast properties so that the other policies can consume them.
To share data, StreamProperties implements the PropertyAccessor trait:
pub trait PropertyAccessor {
fn read_property(&self, path: &[&str]) -> Option<Bytes>;
fn set_property(&self, path: &[&str], value: Option<&[u8]>);
}
The following example shows a simple filter that reads a property from the stream and then writes another parameter to it:
async fn request_filter(stream: StreamProperties) -> Flow<()> {
let incoming = String::from_utf8(stream.read_property(&["incoming_property"]).unwrap_or_default()).unwrap_or_default();
logger::info!("Recieved incoming prop {}", incoming);
let outgoing = "outgoing".as_bytes();
stream.set_property(&["outgoing_property"], Some(outgoing));
Flow::Continue(())
}
#[entrypoint]
async fn configure(launcher: Launcher) -> Result<()> {
let filter = on_request(|stream| request_filter(stream));
launcher.launch(filter).await?;
Ok(())
}