Deluge Firmware
1.3.0
Build date: 2025.04.16
Loading...
Searching...
No Matches
try.h
1
#pragma once
2
#include <utility>
3
4
#define D_TRY(expr) \
5
({ \
6
auto result = (expr); \
7
if (!result.has_value()) [[unlikely]] { \
8
return std::unexpected(result.error()); \
9
} \
10
result.value(); \
11
})
12
13
#define D_TRY_CATCH(expr, error_var, block) \
14
({ \
15
auto result = (expr); \
16
if (!result.has_value()) [[unlikely]] { \
17
auto error_var = result.error(); \
18
block \
19
} \
20
result.value(); \
21
})
22
23
#define D_TRY_MOVE(expr) \
24
({ \
25
auto result = (expr); \
26
if (!result.has_value()) [[unlikely]] { \
27
return std::unexpected(result.error()); \
28
} \
29
std::move(result.value()); \
30
})
31
32
#define D_TRY_CATCH_MOVE(expr, error_var, block) \
33
({ \
34
auto result = (expr); \
35
if (!result.has_value()) [[unlikely]] { \
36
auto error_var = result.error(); \
37
block \
38
} \
39
std::move(result.value()); \
40
})