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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
//! # Unwrap unreachable
//!
//! Provides `Option::unreachable()` and `Result::unreachable()` methods by providing an [`UnwrapUnreachable`] extension trait.
//!
//! # Usage
//!
//! ```ignore
//! // Make sure you import the trait. Otherwise, these functions will not be available.
//! use unwrap_unreachable::UnwrapUnreachable;
//!
//! // This regex is known to compile at compile time… so it will not panic
//! // at execution
//! static H5AI_RE: LazyLock<Regex> = LazyLock::new(|| Regex::new(r"powered by h5ai (v\d+.\d+.\d+)").unreachable());
//!
//! // unreachable() here is ok since we know this should not return anything
//! // else than Ok(httpdir) if it does it should panic as the test fail.
//! let httpdir = prepare_httpdir().filter_by_name("debian").unreachable();
//! ```
use Debug;
/// Provide the `unreachable()` method on [`Option`] and [`Result`] types.
///
/// # Usage
///
/// Use the `.unreachable()` function like you would use [`Result::unwrap`] or [`Option::unwrap`].
/// This, however, will panic with the error message "internal error: entered unreachable code".
///
/// You should use this function in code that you know by design that it can not return anything
/// else than `Ok()` or `Some()` to clarify your intention.
!
!