pdk_core/policy_context/
mod.rs1use crate::host::property::PropertyAccessor;
8use crate::policy_context::metadata::PolicyMetadata;
9use std::rc::Rc;
10
11pub mod api;
12pub mod authentication;
13#[doc(hidden)]
14pub mod metadata;
15pub mod policy_violation;
16#[doc(hidden)]
17pub mod static_policy_context_cache;
18
19const AUTHENTICATION_PROPERTY: &[&str] = &["authentication"];
20
21pub trait PolicyContext {
27 fn policy_metadata(&self) -> Rc<PolicyMetadata>;
29
30 fn connection_properties(&self) -> &dyn PropertyAccessor;
32}
33
34impl dyn PolicyContext {
35 #[allow(clippy::should_implement_trait)]
36 pub fn default() -> &'static dyn PolicyContext {
37 &impls::Host
38 }
39}
40
41mod impls {
42 use super::{metadata::PolicyMetadata, PolicyContext};
43 use crate::host::property::PropertyAccessor;
44 use crate::policy_context::static_policy_context_cache::StaticPolicyContextCache;
45 use std::rc::Rc;
46
47 pub(crate) struct Host;
48
49 impl PolicyContext for Host {
50 fn policy_metadata(&self) -> Rc<PolicyMetadata> {
51 Rc::clone(&StaticPolicyContextCache::read_metadata())
52 }
53
54 fn connection_properties(&self) -> &dyn PropertyAccessor {
55 <dyn PropertyAccessor>::default()
56 }
57 }
58}