pdk_core/policy_context/
mod.rs

1// Copyright (c) 2025, Salesforce, Inc.,
2// All rights reserved.
3// For full license text, see the LICENSE.txt file
4
5//! Policy context related APIs to access Flex policy data.
6
7use 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
21/// An interface of the Flex Policy Context.
22///
23/// PolicyContext is responsible for
24/// * Access policy metadata,
25/// * Manage authentication data.
26pub trait PolicyContext {
27    /// Returns the policy metadata.
28    fn policy_metadata(&self) -> Rc<PolicyMetadata>;
29
30    /// Returns a property accessor
31    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}