use serde::Serialize;
use std::sync::Arc;
use super::super::traits::ExtensionAction;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
pub enum PrivacyImpact {
None,
StorageCompression,
Hybrid,
Confidential,
}
pub trait AnalysisAction: ExtensionAction {
fn privacy_impact(&self) -> PrivacyImpact;
}
#[derive(Clone)]
pub struct AnalysisExtensionAction(Arc<dyn AnalysisAction>);
impl AnalysisExtensionAction {
pub fn new(action: Arc<dyn AnalysisAction>) -> Self {
Self(action)
}
pub fn protocol_name(&self) -> &'static str {
self.0.protocol_name()
}
pub fn description(&self) -> String {
self.0.description()
}
pub fn privacy_impact(&self) -> PrivacyImpact {
self.0.privacy_impact()
}
}
impl std::fmt::Debug for AnalysisExtensionAction {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.0.description())
}
}