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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
use failure::Fail;
#[derive(Debug, Fail)]
pub enum Error {
#[fail(display = "Failed to convert value {} to enum", value)]
EnumFromIntError { value: i32 },
#[fail(display = "esp-idf error: {}", error)]
EspIdf { error: EspError },
#[fail(display = "Unknown Event Base")]
UnknownEventBase,
#[fail(display = "Invalid argument")]
InvalidArgument,
}
#[repr(u32)]
#[derive(Debug, failure::Fail)]
pub enum EspError {
#[fail(display = "NO_MEM")]
NoMem = esp_idf_sys::ESP_ERR_NO_MEM,
#[fail(display = "INVALID_ARG")]
InvalidArg = esp_idf_sys::ESP_ERR_INVALID_ARG,
#[fail(display = "INVALID_STATE")]
InvalidState = esp_idf_sys::ESP_ERR_INVALID_STATE,
#[fail(display = "INVALID_SIZE")]
InvalidSize = esp_idf_sys::ESP_ERR_INVALID_SIZE,
#[fail(display = "NOT_FOUND")]
NotFound = esp_idf_sys::ESP_ERR_NOT_FOUND,
#[fail(display = "NOT_SUPPORTED")]
NotSupported = esp_idf_sys::ESP_ERR_NOT_SUPPORTED,
#[fail(display = "TIMEOUT")]
Timeout = esp_idf_sys::ESP_ERR_TIMEOUT,
#[fail(display = "INVALID_RESPONSE")]
InvalidResponse = esp_idf_sys::ESP_ERR_INVALID_RESPONSE,
#[fail(display = "INVALID_CRC")]
InvalidCrc = esp_idf_sys::ESP_ERR_INVALID_CRC,
#[fail(display = "INVALID_VERSION")]
InvalidVersion = esp_idf_sys::ESP_ERR_INVALID_VERSION,
#[fail(display = "INVALID_MAC")]
InvalidMac = esp_idf_sys::ESP_ERR_INVALID_MAC,
#[fail(display = "WIFI_BASE")]
WifiBase = esp_idf_sys::ESP_ERR_WIFI_BASE,
#[fail(display = "MESH_BASE")]
MeshBase = esp_idf_sys::ESP_ERR_MESH_BASE,
}
pub struct EnumFromIntError(i32);
impl core::convert::TryFrom<i32> for EspError {
type Error = EnumFromIntError;
fn try_from(value: i32) -> core::result::Result<Self, Self::Error> {
use EspError::*;
match value as u32 {
esp_idf_sys::ESP_ERR_NO_MEM => Ok(NoMem),
esp_idf_sys::ESP_ERR_INVALID_ARG => Ok(InvalidArg),
esp_idf_sys::ESP_ERR_INVALID_STATE => Ok(InvalidState),
esp_idf_sys::ESP_ERR_INVALID_SIZE => Ok(InvalidSize),
esp_idf_sys::ESP_ERR_NOT_FOUND => Ok(NotFound),
esp_idf_sys::ESP_ERR_NOT_SUPPORTED => Ok(NotSupported),
esp_idf_sys::ESP_ERR_TIMEOUT => Ok(Timeout),
esp_idf_sys::ESP_ERR_INVALID_RESPONSE => Ok(InvalidResponse),
esp_idf_sys::ESP_ERR_INVALID_CRC => Ok(InvalidCrc),
esp_idf_sys::ESP_ERR_INVALID_VERSION => Ok(InvalidVersion),
esp_idf_sys::ESP_ERR_INVALID_MAC => Ok(InvalidMac),
esp_idf_sys::ESP_ERR_WIFI_BASE => Ok(WifiBase),
esp_idf_sys::ESP_ERR_MESH_BASE => Ok(MeshBase),
_ => Err(EnumFromIntError(value)),
}
}
}