quantrs2_device/provider_capability_discovery/
events.rs1use std::collections::HashMap;
7use std::time::SystemTime;
8
9use serde::{Deserialize, Serialize};
10
11use super::capabilities::ProviderCapabilities;
12use super::config::{ComparisonCriterion, FilteringConfig};
13use super::types::VerificationStatus;
14
15#[derive(Debug, Clone, Serialize, Deserialize)]
17pub enum DiscoveryEvent {
18 ProviderDiscovered {
19 provider_id: String,
20 capabilities: ProviderCapabilities,
21 timestamp: SystemTime,
22 },
23 CapabilityUpdated {
24 provider_id: String,
25 updated_capabilities: ProviderCapabilities,
26 timestamp: SystemTime,
27 },
28 ProviderUnavailable {
29 provider_id: String,
30 reason: String,
31 timestamp: SystemTime,
32 },
33 VerificationCompleted {
34 provider_id: String,
35 status: VerificationStatus,
36 timestamp: SystemTime,
37 },
38 ComparisonCompleted {
39 providers: Vec<String>,
40 results: ComparisonResults,
41 timestamp: SystemTime,
42 },
43}
44
45#[derive(Debug, Clone, Serialize, Deserialize)]
47pub enum DiscoveryCommand {
48 DiscoverProviders,
49 VerifyProvider(String),
50 UpdateCapabilities(String),
51 CompareProviders(Vec<String>),
52 FilterProviders(FilteringConfig),
53 GetProviderInfo(String),
54 GetProviderRanking(Vec<ComparisonCriterion>),
55 GenerateReport(ReportType),
56}
57
58#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
60pub enum ReportType {
61 ProviderSummary,
62 CapabilityMatrix,
63 PerformanceComparison,
64 CostAnalysis,
65 SecurityAssessment,
66 ComprehensiveReport,
67}
68
69#[derive(Debug, Clone, Serialize, Deserialize)]
71pub struct ComparisonResults {
72 pub rankings: Vec<ProviderRanking>,
74 pub comparison_matrix: HashMap<String, HashMap<String, f64>>,
76 pub analysis_summary: AnalysisSummary,
78 pub recommendations: Vec<ProviderRecommendation>,
80}
81
82#[derive(Debug, Clone, Serialize, Deserialize)]
84pub struct ProviderRanking {
85 pub provider_id: String,
87 pub overall_score: f64,
89 pub category_scores: HashMap<String, f64>,
91 pub rank: usize,
93 pub strengths: Vec<String>,
95 pub weaknesses: Vec<String>,
97}
98
99#[derive(Debug, Clone, Serialize, Deserialize)]
101pub struct AnalysisSummary {
102 pub key_findings: Vec<String>,
104 pub market_insights: Vec<String>,
106 pub trends: Vec<String>,
108 pub risk_factors: Vec<String>,
110}
111
112#[derive(Debug, Clone, Serialize, Deserialize)]
114pub struct ProviderRecommendation {
115 pub provider_id: String,
117 pub recommendation_type: RecommendationType,
119 pub use_case: String,
121 pub confidence: f64,
123 pub reasoning: String,
125 pub cost_estimate: Option<CostEstimate>,
127}
128
129#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
131pub enum RecommendationType {
132 BestOverall,
133 BestValue,
134 BestPerformance,
135 BestSecurity,
136 BestSupport,
137 BestForBeginners,
138 BestForResearch,
139 BestForProduction,
140 Custom(String),
141}
142
143#[derive(Debug, Clone, Serialize, Deserialize)]
145pub struct CostEstimate {
146 pub monthly_cost: f64,
148 pub cost_breakdown: HashMap<String, f64>,
150 pub currency: String,
152 pub confidence: f64,
154}
155
156#[derive(Debug, Clone, Serialize, Deserialize)]
158pub struct VerificationResult {
159 pub status: VerificationStatus,
161 pub confidence: f64,
163 pub details: HashMap<String, String>,
165 pub verified_at: SystemTime,
167 pub verification_method: String,
169}