pub struct Metadata {
pub flex_metadata: FlexMetadata,
pub policy_metadata: PolicyMetadata,
pub api_metadata: ApiMetadata,
pub platform_metadata: PlatformMetadata,
}
Accessing Policy Metadata
PDK exposes a Metadata
injectable that provides metadata about the policy, the Flex instance, the API instance, and the Anypoint Organization. The Metadata
struct is as follows:
The Metadata
struct references the following structures:
-
FlexMetadata
:pub struct FlexMetadata { pub flex_name: String, pub flex_version: String, }
-
PolicyMetadata
:pub struct PolicyMetadata { pub policy_name: String, pub policy_namespace: String, }
-
ApiMetadata
:pub struct ApiMetadata { pub id: Option<String>, pub name: Option<String>, pub version: Option<String>, pub slas: Option<Vec<ApiSla>>, // API SLA tiers in the platform } // Each ApiSla contains the limits for each SLA. pub struct ApiSla { pub id: String, pub tiers: Vec<Tier>, // Limits within an API SLA tier in the platform }
-
PlatformMetadata
:pub struct PlatformMetadata { pub organization_id: String, pub environment_id: String, pub root_organization_id: String, }
Inject Metadata into the #[entrypoint]
To inject metadata into the #[entrypoint]
configuration function, see the following code snippet:
#[entrypoint]
async fn configure(launcher: Launcher, metadata: Metadata) -> Result<()> {
logger::info!("Flex instance name is: {}", metadata.flex_metadata.flex_name.to_string());
launcher
.launch(on_request(filter))
.await?;
Ok(())
}
Inject Metadata into the Wrapped Functions
You cannot directly inject metadata into the wrapped functions. To use metadata in the wrapped functions, first inject the data into the #[entrypoint]
function and then the wrapped function:
#[entrypoint]
async fn configure(launcher: Launcher, metadata: Metadata) -> Result<()> {
launcher
.launch(on_request(|r| request_filter(r, &metadata)))
.await?;
Ok(())
}
async fn request_filter(_: RequestState, metadata: &Metadata) -> Flow<()> {
let mut vec = Vec::new();
let headers = &mut vec;
headers.push((
"flex_name".to_string(),
metadata.flex_metadata.flex_name.to_string(),
));
headers.push((
"policy_name".to_string(),
metadata.policy_metadata.policy_name.to_string(),
));
Flow::Break(Response::new(201).with_headers(vec))
}