Add PanicHookInfo::payload_as_str(). · model-checking/verify-rust-std@fea6b03 (original) (raw)
`@@ -96,6 +96,45 @@ impl<'a> PanicHookInfo<'a> {
`
96
96
`self.payload
`
97
97
`}
`
98
98
``
``
99
`+
/// Returns the payload associated with the panic, if it is a string.
`
``
100
`+
///
`
``
101
`` +
/// This returns the payload if it is of type &'static str
or String
.
``
``
102
`+
///
`
``
103
`` +
/// A invocation of the panic!()
macro in Rust 2021 or later will always result in a
``
``
104
`` +
/// panic payload where payload_as_str
returns Some
.
``
``
105
`+
///
`
``
106
`` +
/// Only an invocation of [panic_any
]
``
``
107
`` +
/// (or, in Rust 2018 and earlier, panic!(x)
where x
is something other than a string)
``
``
108
`` +
/// can result in a panic payload where payload_as_str
returns None
.
``
``
109
`+
///
`
``
110
`+
/// # Example
`
``
111
`+
///
`
``
112
/// ```should_panic
``
113
`+
/// #![feature(panic_payload_as_str)]
`
``
114
`+
///
`
``
115
`+
/// std::panic::set_hook(Box::new(|panic_info| {
`
``
116
`+
/// if let Some(s) = panic_info.payload_as_str() {
`
``
117
`+
/// println!("panic occurred: {s:?}");
`
``
118
`+
/// } else {
`
``
119
`+
/// println!("panic occurred");
`
``
120
`+
/// }
`
``
121
`+
/// }));
`
``
122
`+
///
`
``
123
`+
/// panic!("Normal panic");
`
``
124
/// ```
``
125
`+
#[must_use]
`
``
126
`+
#[inline]
`
``
127
`+
#[unstable(feature = "panic_payload_as_str", issue = "125175")]
`
``
128
`+
pub fn payload_as_str(&self) -> Option<&str> {
`
``
129
`+
if let Some(s) = self.payload.downcast_ref::<&str>() {
`
``
130
`+
Some(s)
`
``
131
`+
} else if let Some(s) = self.payload.downcast_ref::() {
`
``
132
`+
Some(s)
`
``
133
`+
} else {
`
``
134
`+
None
`
``
135
`+
}
`
``
136
`+
}
`
``
137
+
99
138
`/// Returns information about the location from which the panic originated,
`
100
139
`/// if available.
`
101
140
`///
`