Skip to main content

flexaudio_core/
spawn_error.rs

1//! Safe shared projection for worker creation failures.
2use crate::{Error, ErrorContext, Operation};
3
4/// Keep the I/O classification and numeric OS cause without exposing paths or payloads.
5pub 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}