@@ -2,6 +2,7 @@ use std::{fmt::Display, net::IpAddr, ops::Deref, str::FromStr};
2
2
3
3
use schemars:: JsonSchema ;
4
4
use serde:: { Deserialize , Serialize } ;
5
+ use snafu:: Snafu ;
5
6
6
7
use crate :: validation;
7
8
@@ -49,6 +50,14 @@ impl Deref for Hostname {
49
50
}
50
51
}
51
52
53
+ #[ derive( Debug , Snafu ) ]
54
+ pub enum HostParseError {
55
+ #[ snafu( display(
56
+ "the given host '{host}' is not a valid host, which needs to be either a hostname or IP address"
57
+ ) ) ]
58
+ InvalidHost { host : String } ,
59
+ }
60
+
52
61
/// A validated host (either a [`Hostname`] or IP address) type.
53
62
#[ derive( Serialize , Deserialize , Clone , Debug , Eq , PartialEq , Hash , Ord , PartialOrd ) ]
54
63
#[ serde( try_from = "String" , into = "String" ) ]
@@ -68,7 +77,7 @@ impl JsonSchema for Host {
68
77
}
69
78
70
79
impl FromStr for Host {
71
- type Err = validation :: Error ;
80
+ type Err = HostParseError ;
72
81
73
82
fn from_str ( value : & str ) -> Result < Self , Self :: Err > {
74
83
if let Ok ( ip) = value. parse :: < IpAddr > ( ) {
@@ -79,14 +88,15 @@ impl FromStr for Host {
79
88
return Ok ( Host :: Hostname ( hostname) ) ;
80
89
} ;
81
90
82
- Err ( validation :: Error :: InvalidHost {
91
+ InvalidHostSnafu {
83
92
host : value. to_owned ( ) ,
84
- } )
93
+ }
94
+ . fail ( )
85
95
}
86
96
}
87
97
88
98
impl TryFrom < String > for Host {
89
- type Error = validation :: Error ;
99
+ type Error = HostParseError ;
90
100
91
101
fn try_from ( value : String ) -> Result < Self , Self :: Error > {
92
102
value. parse ( )
0 commit comments