blob: 1153965998b27f1fc8a7a2d6f60bb6634a50bcc3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
//TODO potentially move HeaderTryFrom to `mail-headers`
use error::ComponentCreationError;
//TODO replace with std TryFrom once it is stable
// (either a hard replace, or a soft replace which implements HeaderTryFrom if TryFrom exist)
/// Workaround for `TryFrom`,`TryInto` not being stable.
pub trait HeaderTryFrom<T>: Sized {
fn try_from(val: T) -> Result<Self, ComponentCreationError>;
}
/// Workaround for `TryFrom`,`TryInto` not being stable.
pub trait HeaderTryInto<T>: Sized {
fn try_into(self) -> Result<T, ComponentCreationError>;
}
impl<F, T> HeaderTryInto<T> for F where T: HeaderTryFrom<F> {
fn try_into(self) -> Result<T, ComponentCreationError> {
T::try_from(self)
}
}
impl<T> HeaderTryFrom<T> for T {
fn try_from(val: T) -> Result<Self, ComponentCreationError> {
Ok( val )
}
}
// It is not possible to auto-implement HeaderTryFrom for From/Into as
// this will make new HeaderTryFrom implementations outside of this care
// nearly impossible making the trait partially useless
//
//impl<T, F> HeaderTryFrom<F> for T where F: Into<T> {
// fn try_from(val: F) -> Result<T, Error> {
// Ok( val.into() )
// }
//}
|