1use std::fmt;
2
3#[derive(Debug)]
4pub enum ConversionError {
5 FileNotFound(String),
7 FileRead(String, std::io::Error),
9 InvalidFormat(String),
11 Authentication(String),
13 DirectoryCreation(String, std::io::Error),
15 FileWrite(String, std::io::Error),
17 Ssl(openssl::error::ErrorStack),
19}
20
21impl fmt::Display for ConversionError {
22 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
23 match self {
24 ConversionError::FileNotFound(path) => {
25 write!(f, "PFX file not found: {}", path)
26 }
27 ConversionError::FileRead(path, err) => {
28 write!(f, "Failed to read PFX file '{}': {}", path, err)
29 }
30 ConversionError::InvalidFormat(msg) => {
31 write!(f, "Invalid PFX file format: {}", msg)
32 }
33 ConversionError::Authentication(msg) => {
34 write!(f, "Authentication failed: {}", msg)
35 }
36 ConversionError::DirectoryCreation(path, err) => {
37 write!(f, "Failed to create output directory '{}': {}", path, err)
38 }
39 ConversionError::FileWrite(path, err) => {
40 write!(f, "Failed to write file '{}': {}", path, err)
41 }
42 ConversionError::Ssl(err) => {
43 write!(f, "SSL/TLS error: {}", err)
44 }
45 }
46 }
47}
48
49impl std::error::Error for ConversionError {
50 fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
51 match self {
52 ConversionError::FileRead(_, err) => Some(err),
53 ConversionError::DirectoryCreation(_, err) => Some(err),
54 ConversionError::FileWrite(_, err) => Some(err),
55 ConversionError::Ssl(err) => Some(err),
56 _ => None,
57 }
58 }
59}
60
61impl From<openssl::error::ErrorStack> for ConversionError {
62 fn from(err: openssl::error::ErrorStack) -> Self {
63 ConversionError::Ssl(err)
64 }
65}