1use std::fmt;
2
3use crate::SshOptionKey;
4
5#[derive(Debug)]
7pub enum ConfigError {
8 SshOptionBeforeHost {
10 option: SshOptionKey,
12 value: String,
14 },
15 SshOptionUnknown {
17 key: String,
19 },
20 KeyValueNotFound {
22 line: String,
24 },
25}
26
27impl fmt::Display for ConfigError {
28 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
29 match self {
30 Self::SshOptionBeforeHost { option, .. } => {
31 write!(
32 f,
33 "SSH option `{}` provided before `Host` is specified.",
34 option,
35 )
36 }
37 Self::SshOptionUnknown { key } => {
38 write!(f, "Unknown SSH configuration option `{}`.", key)
39 }
40 Self::KeyValueNotFound { line } => write!(
41 f,
42 "Could not determine key / value for this line: `{}`.\n\
43 Key / value pairs must be separated by ` ` or `=`.",
44 line
45 ),
46 }
47 }
48}
49
50impl std::error::Error for ConfigError {
51 fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
52 match self {
53 Self::SshOptionBeforeHost { .. } => None,
54 Self::SshOptionUnknown { .. } => None,
55 Self::KeyValueNotFound { .. } => None,
56 }
57 }
58}