use std::collections::{HashMap, HashSet};
use std::time::Duration;
use serde::{Deserialize, Serialize};
use super::types::{ProviderFeature, TopologyType};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DiscoveryConfig {
pub enable_auto_discovery: bool,
pub discovery_interval: u64,
pub enable_caching: bool,
pub cache_expiration: Duration,
pub enable_monitoring: bool,
pub enable_analytics: bool,
pub discovery_strategies: Vec<DiscoveryStrategy>,
pub verification_config: VerificationConfig,
pub filtering_config: FilteringConfig,
pub analytics_config: CapabilityAnalyticsConfig,
pub monitoring_config: CapabilityMonitoringConfig,
pub comparison_config: ComparisonConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum DiscoveryStrategy {
APIDiscovery,
RegistryDiscovery,
NetworkDiscovery,
ConfigurationDiscovery,
MLEnhancedDiscovery,
HybridDiscovery,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VerificationConfig {
pub enable_verification: bool,
pub verification_timeout: Duration,
pub verification_strategies: Vec<VerificationStrategy>,
pub min_verification_confidence: f64,
pub enable_continuous_verification: bool,
pub verification_frequency: Duration,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum VerificationStrategy {
EndpointTesting,
CapabilityProbing,
BenchmarkTesting,
HistoricalAnalysis,
CommunityValidation,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FilteringConfig {
pub enable_filtering: bool,
pub min_requirements: CapabilityRequirements,
pub excluded_providers: HashSet<String>,
pub preferred_providers: Vec<String>,
pub quality_thresholds: QualityThresholds,
pub geographic_restrictions: Option<GeographicRestrictions>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CapabilityRequirements {
pub min_qubits: Option<usize>,
pub max_error_rate: Option<f64>,
pub required_gates: HashSet<String>,
pub required_connectivity: Option<ConnectivityRequirement>,
pub required_features: HashSet<ProviderFeature>,
pub performance_requirements: PerformanceRequirements,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ConnectivityRequirement {
FullyConnected,
MinimumDegree(usize),
SpecificTopology(TopologyType),
CustomPattern(Vec<(usize, usize)>),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PerformanceRequirements {
pub max_execution_time: Option<Duration>,
pub min_throughput: Option<f64>,
pub max_queue_time: Option<Duration>,
pub min_availability: Option<f64>,
pub max_cost_per_shot: Option<f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QualityThresholds {
pub min_fidelity: f64,
pub max_error_rate: f64,
pub min_uptime: f64,
pub min_reliability: f64,
pub min_performance: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GeographicRestrictions {
pub allowed_regions: HashSet<String>,
pub blocked_regions: HashSet<String>,
pub data_sovereignty: bool,
pub compliance_requirements: Vec<ComplianceStandard>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ComplianceStandard {
GDPR,
HIPAA,
SOC2,
ISO27001,
FedRAMP,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CapabilityAnalyticsConfig {
pub enable_trend_analysis: bool,
pub enable_predictive_analytics: bool,
pub enable_comparative_analysis: bool,
pub analysis_depth: AnalysisDepth,
pub retention_period: Duration,
pub confidence_level: f64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum AnalysisDepth {
Basic,
Standard,
Advanced,
Comprehensive,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CapabilityMonitoringConfig {
pub enable_realtime_monitoring: bool,
pub monitoring_frequency: Duration,
pub health_check_interval: Duration,
pub alert_thresholds: HashMap<String, f64>,
pub enable_anomaly_detection: bool,
pub anomaly_sensitivity: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ComparisonConfig {
pub enable_auto_comparison: bool,
pub comparison_criteria: Vec<ComparisonCriterion>,
pub ranking_algorithms: Vec<RankingAlgorithm>,
pub criterion_weights: HashMap<String, f64>,
pub enable_multidimensional_analysis: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ComparisonCriterion {
Performance,
Cost,
Reliability,
Availability,
Features,
Security,
Compliance,
Support,
Innovation,
Custom(String),
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum RankingAlgorithm {
WeightedSum,
TOPSIS,
AHP, ELECTRE,
PROMETHEE,
MachineLearning,
Custom(String),
}
impl Default for DiscoveryConfig {
fn default() -> Self {
Self {
enable_auto_discovery: true,
discovery_interval: 3600, enable_caching: true,
cache_expiration: Duration::from_secs(86400), enable_monitoring: true,
enable_analytics: true,
discovery_strategies: vec![
DiscoveryStrategy::APIDiscovery,
DiscoveryStrategy::RegistryDiscovery,
],
verification_config: VerificationConfig {
enable_verification: true,
verification_timeout: Duration::from_secs(300),
verification_strategies: vec![
VerificationStrategy::EndpointTesting,
VerificationStrategy::CapabilityProbing,
],
min_verification_confidence: 0.8,
enable_continuous_verification: true,
verification_frequency: Duration::from_secs(86400),
},
filtering_config: FilteringConfig {
enable_filtering: true,
min_requirements: CapabilityRequirements {
min_qubits: Some(2),
max_error_rate: Some(0.1),
required_gates: HashSet::new(),
required_connectivity: None,
required_features: HashSet::new(),
performance_requirements: PerformanceRequirements {
max_execution_time: None,
min_throughput: None,
max_queue_time: None,
min_availability: Some(0.9),
max_cost_per_shot: None,
},
},
excluded_providers: HashSet::new(),
preferred_providers: Vec::new(),
quality_thresholds: QualityThresholds {
min_fidelity: 0.8,
max_error_rate: 0.1,
min_uptime: 0.95,
min_reliability: 0.9,
min_performance: 0.7,
},
geographic_restrictions: None,
},
analytics_config: CapabilityAnalyticsConfig {
enable_trend_analysis: true,
enable_predictive_analytics: true,
enable_comparative_analysis: true,
analysis_depth: AnalysisDepth::Standard,
retention_period: Duration::from_secs(30 * 86400), confidence_level: 0.95,
},
monitoring_config: CapabilityMonitoringConfig {
enable_realtime_monitoring: true,
monitoring_frequency: Duration::from_secs(300), health_check_interval: Duration::from_secs(600), alert_thresholds: HashMap::new(),
enable_anomaly_detection: true,
anomaly_sensitivity: 0.8,
},
comparison_config: ComparisonConfig {
enable_auto_comparison: true,
comparison_criteria: vec![
ComparisonCriterion::Performance,
ComparisonCriterion::Cost,
ComparisonCriterion::Reliability,
],
ranking_algorithms: vec![RankingAlgorithm::WeightedSum],
criterion_weights: HashMap::new(),
enable_multidimensional_analysis: true,
},
}
}
}