1use std::collections::{HashMap, HashSet};
7use std::time::Duration;
8
9use serde::{Deserialize, Serialize};
10
11use super::types::{ProviderFeature, TopologyType};
12
13#[derive(Debug, Clone, Serialize, Deserialize)]
15pub struct DiscoveryConfig {
16 pub enable_auto_discovery: bool,
18 pub discovery_interval: u64,
20 pub enable_caching: bool,
22 pub cache_expiration: Duration,
24 pub enable_monitoring: bool,
26 pub enable_analytics: bool,
28 pub discovery_strategies: Vec<DiscoveryStrategy>,
30 pub verification_config: VerificationConfig,
32 pub filtering_config: FilteringConfig,
34 pub analytics_config: CapabilityAnalyticsConfig,
36 pub monitoring_config: CapabilityMonitoringConfig,
38 pub comparison_config: ComparisonConfig,
40}
41
42#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
44pub enum DiscoveryStrategy {
45 APIDiscovery,
47 RegistryDiscovery,
49 NetworkDiscovery,
51 ConfigurationDiscovery,
53 MLEnhancedDiscovery,
55 HybridDiscovery,
57}
58
59#[derive(Debug, Clone, Serialize, Deserialize)]
61pub struct VerificationConfig {
62 pub enable_verification: bool,
64 pub verification_timeout: Duration,
66 pub verification_strategies: Vec<VerificationStrategy>,
68 pub min_verification_confidence: f64,
70 pub enable_continuous_verification: bool,
72 pub verification_frequency: Duration,
74}
75
76#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
78pub enum VerificationStrategy {
79 EndpointTesting,
81 CapabilityProbing,
83 BenchmarkTesting,
85 HistoricalAnalysis,
87 CommunityValidation,
89}
90
91#[derive(Debug, Clone, Serialize, Deserialize)]
93pub struct FilteringConfig {
94 pub enable_filtering: bool,
96 pub min_requirements: CapabilityRequirements,
98 pub excluded_providers: HashSet<String>,
100 pub preferred_providers: Vec<String>,
102 pub quality_thresholds: QualityThresholds,
104 pub geographic_restrictions: Option<GeographicRestrictions>,
106}
107
108#[derive(Debug, Clone, Serialize, Deserialize)]
110pub struct CapabilityRequirements {
111 pub min_qubits: Option<usize>,
113 pub max_error_rate: Option<f64>,
115 pub required_gates: HashSet<String>,
117 pub required_connectivity: Option<ConnectivityRequirement>,
119 pub required_features: HashSet<ProviderFeature>,
121 pub performance_requirements: PerformanceRequirements,
123}
124
125#[derive(Debug, Clone, Serialize, Deserialize)]
127pub enum ConnectivityRequirement {
128 FullyConnected,
130 MinimumDegree(usize),
132 SpecificTopology(TopologyType),
134 CustomPattern(Vec<(usize, usize)>),
136}
137
138#[derive(Debug, Clone, Serialize, Deserialize)]
140pub struct PerformanceRequirements {
141 pub max_execution_time: Option<Duration>,
143 pub min_throughput: Option<f64>,
145 pub max_queue_time: Option<Duration>,
147 pub min_availability: Option<f64>,
149 pub max_cost_per_shot: Option<f64>,
151}
152
153#[derive(Debug, Clone, Serialize, Deserialize)]
155pub struct QualityThresholds {
156 pub min_fidelity: f64,
158 pub max_error_rate: f64,
160 pub min_uptime: f64,
162 pub min_reliability: f64,
164 pub min_performance: f64,
166}
167
168#[derive(Debug, Clone, Serialize, Deserialize)]
170pub struct GeographicRestrictions {
171 pub allowed_regions: HashSet<String>,
173 pub blocked_regions: HashSet<String>,
175 pub data_sovereignty: bool,
177 pub compliance_requirements: Vec<ComplianceStandard>,
179}
180
181#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
183pub enum ComplianceStandard {
184 GDPR,
185 HIPAA,
186 SOC2,
187 ISO27001,
188 FedRAMP,
189 Custom(String),
190}
191
192#[derive(Debug, Clone, Serialize, Deserialize)]
194pub struct CapabilityAnalyticsConfig {
195 pub enable_trend_analysis: bool,
197 pub enable_predictive_analytics: bool,
199 pub enable_comparative_analysis: bool,
201 pub analysis_depth: AnalysisDepth,
203 pub retention_period: Duration,
205 pub confidence_level: f64,
207}
208
209#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
211pub enum AnalysisDepth {
212 Basic,
213 Standard,
214 Advanced,
215 Comprehensive,
216}
217
218#[derive(Debug, Clone, Serialize, Deserialize)]
220pub struct CapabilityMonitoringConfig {
221 pub enable_realtime_monitoring: bool,
223 pub monitoring_frequency: Duration,
225 pub health_check_interval: Duration,
227 pub alert_thresholds: HashMap<String, f64>,
229 pub enable_anomaly_detection: bool,
231 pub anomaly_sensitivity: f64,
233}
234
235#[derive(Debug, Clone, Serialize, Deserialize)]
237pub struct ComparisonConfig {
238 pub enable_auto_comparison: bool,
240 pub comparison_criteria: Vec<ComparisonCriterion>,
242 pub ranking_algorithms: Vec<RankingAlgorithm>,
244 pub criterion_weights: HashMap<String, f64>,
246 pub enable_multidimensional_analysis: bool,
248}
249
250#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
252pub enum ComparisonCriterion {
253 Performance,
254 Cost,
255 Reliability,
256 Availability,
257 Features,
258 Security,
259 Compliance,
260 Support,
261 Innovation,
262 Custom(String),
263}
264
265#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
267pub enum RankingAlgorithm {
268 WeightedSum,
269 TOPSIS,
270 AHP, ELECTRE,
272 PROMETHEE,
273 MachineLearning,
274 Custom(String),
275}
276
277impl Default for DiscoveryConfig {
278 fn default() -> Self {
279 Self {
280 enable_auto_discovery: true,
281 discovery_interval: 3600, enable_caching: true,
283 cache_expiration: Duration::from_secs(86400), enable_monitoring: true,
285 enable_analytics: true,
286 discovery_strategies: vec![
287 DiscoveryStrategy::APIDiscovery,
288 DiscoveryStrategy::RegistryDiscovery,
289 ],
290 verification_config: VerificationConfig {
291 enable_verification: true,
292 verification_timeout: Duration::from_secs(300),
293 verification_strategies: vec![
294 VerificationStrategy::EndpointTesting,
295 VerificationStrategy::CapabilityProbing,
296 ],
297 min_verification_confidence: 0.8,
298 enable_continuous_verification: true,
299 verification_frequency: Duration::from_secs(86400),
300 },
301 filtering_config: FilteringConfig {
302 enable_filtering: true,
303 min_requirements: CapabilityRequirements {
304 min_qubits: Some(2),
305 max_error_rate: Some(0.1),
306 required_gates: HashSet::new(),
307 required_connectivity: None,
308 required_features: HashSet::new(),
309 performance_requirements: PerformanceRequirements {
310 max_execution_time: None,
311 min_throughput: None,
312 max_queue_time: None,
313 min_availability: Some(0.9),
314 max_cost_per_shot: None,
315 },
316 },
317 excluded_providers: HashSet::new(),
318 preferred_providers: Vec::new(),
319 quality_thresholds: QualityThresholds {
320 min_fidelity: 0.8,
321 max_error_rate: 0.1,
322 min_uptime: 0.95,
323 min_reliability: 0.9,
324 min_performance: 0.7,
325 },
326 geographic_restrictions: None,
327 },
328 analytics_config: CapabilityAnalyticsConfig {
329 enable_trend_analysis: true,
330 enable_predictive_analytics: true,
331 enable_comparative_analysis: true,
332 analysis_depth: AnalysisDepth::Standard,
333 retention_period: Duration::from_secs(30 * 86400), confidence_level: 0.95,
335 },
336 monitoring_config: CapabilityMonitoringConfig {
337 enable_realtime_monitoring: true,
338 monitoring_frequency: Duration::from_secs(300), health_check_interval: Duration::from_secs(600), alert_thresholds: HashMap::new(),
341 enable_anomaly_detection: true,
342 anomaly_sensitivity: 0.8,
343 },
344 comparison_config: ComparisonConfig {
345 enable_auto_comparison: true,
346 comparison_criteria: vec![
347 ComparisonCriterion::Performance,
348 ComparisonCriterion::Cost,
349 ComparisonCriterion::Reliability,
350 ],
351 ranking_algorithms: vec![RankingAlgorithm::WeightedSum],
352 criterion_weights: HashMap::new(),
353 enable_multidimensional_analysis: true,
354 },
355 }
356 }
357}