flexaudio_core/
spawn_error.rs1use crate::{Error, ErrorContext, Operation};
3
4pub fn spawn_error(call: &'static str, error: std::io::Error) -> Error {
6 Error::Backend(format!("{call} worker creation failed (I/O kind {:?}, OS code {:?}); release system resources and retry", error.kind(), error.raw_os_error()))
7 .with_context(ErrorContext::new(Operation::Start))
8}
9
10#[cfg(test)]
11mod tests {
12 use super::*;
13 #[test]
14 fn spawn_failure_retains_kind_and_os_code_without_private_payload() {
15 let err = std::io::Error::from_raw_os_error(11);
16 let kind = format!("{:?}", err.kind());
17 let code = format!("{:?}", err.raw_os_error());
18 let error = spawn_error("capture", err);
19 assert!(error.to_string().contains(&kind));
20 assert!(error.to_string().contains(&code));
21 let error = spawn_error(
22 "capture",
23 std::io::Error::from(std::io::ErrorKind::WouldBlock),
24 );
25 assert!(error.to_string().contains("WouldBlock"));
26 let error = spawn_error("capture", std::io::Error::other("private payload"));
27 assert!(!error.to_string().contains("private payload"));
28 }
29}