pdk-contracts-lib 1.9.1-alpha.2

PDK Contracts Library
Documentation
// Copyright (c) 2026, Salesforce, Inc.,
// All rights reserved.
// For full license text, see the LICENSE.txt file

use crate::implementation::model::abort;
use crate::implementation::platform::shared::AccessToken;
use pdk_core::classy::shared_data::concurrent_shared_data::ConcurrentSharedData;
use pdk_core::classy::{Clock, SharedData};
use std::rc::Rc;
use std::str;

pub trait SessionStorage {
    fn session_lock_key(&self) -> String;
    fn save_token(&self, token: AccessToken);
    fn get_token(&self) -> Option<AccessToken>;
}

const SESSION_LOCK: &str = "ANYPOINT_SESSION_LOCK";
const KEY_TOKEN: &str = "ANYPOINT_ACCESS_TOKEN";

pub struct SessionSharedDataStorage {
    concurrent_shared_data: ConcurrentSharedData,
}

impl SessionSharedDataStorage {
    pub fn new(clock: Rc<dyn Clock>, shared_data: Rc<dyn SharedData>) -> Self {
        Self {
            concurrent_shared_data: ConcurrentSharedData::new(clock, shared_data),
        }
    }
}

impl SessionStorage for SessionSharedDataStorage {
    fn session_lock_key(&self) -> String {
        SESSION_LOCK.to_string()
    }

    fn save_token(&self, token: AccessToken) {
        self.concurrent_shared_data
            .insert(KEY_TOKEN.to_string(), token, abort);
    }

    fn get_token(&self) -> Option<AccessToken> {
        self.concurrent_shared_data.get(KEY_TOKEN)
    }
}