aboutsummaryrefslogtreecommitdiff
path: root/stockton-render/src/error.rs
blob: 73726b222bc10d2eabb636e7796e35fac216c99f (plain)
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
//! Error types

use anyhow;
use thiserror::Error;

#[derive(Error, Debug)]
pub enum LockPoisoned {
    #[error("Device lock poisoned")]
    Device,

    #[error("Map lock poisoned")]
    Map,

    #[error("Queue lock poisoned")]
    Queue,

    #[error("Other lock poisoned")]
    Other,
}

/// Indicates the given property has no acceptable values
#[derive(Debug, Error)]
pub enum EnvironmentError {
    #[error("No supported color format")]
    ColorFormat,

    #[error("No supported depth format")]
    DepthFormat,

    #[error("No supported present mode")]
    PresentMode,

    #[error("No supported composite alpha mode")]
    CompositeAlphaMode,

    #[error("No suitable queue families found")]
    NoSuitableFamilies,

    #[error("No suitable memory types found")]
    NoMemoryTypes,

    #[error("Couldn't use shaderc")]
    NoShaderC,

    #[error("No suitable queues")]
    NoQueues,
}

pub fn full_error_display(err: anyhow::Error) -> String {
    let cont = err
        .chain()
        .skip(1)
        .map(|cause| format!("    caused by: {}", cause))
        .collect::<Vec<String>>()
        .join("\n");

    format!("Error: {}\n{}", err, cont)
}