auths_sdk/ports/
diagnostics.rs1use serde::{Deserialize, Serialize};
7
8#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
10pub enum ConfigIssue {
11 Mismatch {
13 key: String,
15 expected: String,
17 actual: String,
19 },
20 Absent(String),
22}
23
24#[derive(Debug, Clone, Serialize, Deserialize)]
26pub struct CheckResult {
27 pub name: String,
29 pub passed: bool,
31 pub message: Option<String>,
33 #[serde(default)]
35 pub config_issues: Vec<ConfigIssue>,
36}
37
38#[derive(Debug, Serialize, Deserialize)]
40pub struct DiagnosticReport {
41 pub checks: Vec<CheckResult>,
43}
44
45#[derive(Debug, thiserror::Error)]
47pub enum DiagnosticError {
48 #[error("check failed to execute: {0}")]
50 ExecutionFailed(String),
51}
52
53pub trait GitDiagnosticProvider: Send + Sync {
61 fn check_git_version(&self) -> Result<CheckResult, DiagnosticError>;
63
64 fn get_git_config(&self, key: &str) -> Result<Option<String>, DiagnosticError>;
66}
67
68pub trait CryptoDiagnosticProvider: Send + Sync {
75 fn check_ssh_keygen_available(&self) -> Result<CheckResult, DiagnosticError>;
77}
78
79impl<T: GitDiagnosticProvider> GitDiagnosticProvider for &T {
80 fn check_git_version(&self) -> Result<CheckResult, DiagnosticError> {
81 (**self).check_git_version()
82 }
83 fn get_git_config(&self, key: &str) -> Result<Option<String>, DiagnosticError> {
84 (**self).get_git_config(key)
85 }
86}
87
88impl<T: CryptoDiagnosticProvider> CryptoDiagnosticProvider for &T {
89 fn check_ssh_keygen_available(&self) -> Result<CheckResult, DiagnosticError> {
90 (**self).check_ssh_keygen_available()
91 }
92}