Skip to main content

screen_record/
error.rs

1use std::fmt;
2
3#[derive(Debug, Clone)]
4pub struct CliError {
5    message: String,
6    exit_code: u8,
7}
8
9impl CliError {
10    pub fn usage(message: impl Into<String>) -> Self {
11        Self::new(message, 2)
12    }
13
14    pub fn unsupported_platform() -> Self {
15        Self::usage("screen-record is only supported on macOS (12+) and Linux (X11)")
16    }
17
18    pub fn runtime(message: impl Into<String>) -> Self {
19        Self::new(message, 1)
20    }
21
22    fn new(message: impl Into<String>, exit_code: u8) -> Self {
23        let mut message = message.into();
24        if !message.starts_with("error:") {
25            message = format!("error: {message}");
26        }
27        Self { message, exit_code }
28    }
29
30    pub fn exit_code(&self) -> u8 {
31        self.exit_code
32    }
33}
34
35impl fmt::Display for CliError {
36    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
37        write!(f, "{}", self.message)
38    }
39}
40
41impl std::error::Error for CliError {}