summaryrefslogtreecommitdiff
path: root/src/error.zig
blob: 21002f29fdfd1adddfa5ebe842ff0233a2062d43 (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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
const std = @import("std");
const c = @import("c");

pub const Exception = enum {

    const Self = @This();

    base_exception,
    base_exception_group,
    exception,
    arithmetic_error,
    assertion_error,
    attribute_error,
    blocking_io_error,
    broken_pipe_error,
    buffer_error,
    child_process_error,
    connection_aborted_error,
    connection_error,
    connection_refused_error,
    connection_reset_error,
    eof_error,
    file_exists_error,
    file_not_found_error,
    floating_point_error,
    generator_exit,
    import_error,
    indentation_error,
    index_error,
    interrupted_error,
    is_a_directory_error,
    key_error,
    keyboard_interrupt,
    lookup_error,
    memory_error,
    module_not_found_error,
    name_error,
    not_a_directory_error,
    not_implemented_error,
    os_error,
    overflow_error,
    permission_error,
    process_lookup_error,
    python_finalization_error,
    recursion_error,
    reference_error,
    runtime_error,
    stop_async_iteration,
    stop_iteration,
    syntax_error,
    system_error,
    system_exit,
    tab_error,
    timeout_error,
    type_error,
    unbound_local_error,
    unicode_decode_error,
    unicode_encode_error,
    unicode_error,
    unicode_translate_error,
    value_error,
    zero_division_error,
    unknown_error,

    pub fn concreteException() ?Self {
        const err = c.PyErr_Occurred() orelse return null;

        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_BaseException) == 1) return .base_exception;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_BaseExceptionGroup) == 1) return .base_exception_group;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_Exception) == 1) return .exception;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_ArithmeticError) == 1) return .arithmetic_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_AssertionError) == 1) return .assertion_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_AttributeError) == 1) return .attribute_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_BlockingIOError) == 1) return .blocking_io_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_BrokenPipeError) == 1) return .broken_pipe_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_BufferError) == 1) return .buffer_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_ChildProcessError) == 1) return .child_process_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_ConnectionAbortedError) == 1) return .connection_aborted_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_ConnectionError) == 1) return .connection_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_ConnectionRefusedError) == 1) return .connection_refused_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_ConnectionResetError) == 1) return .connection_reset_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_EOFError) == 1) return .e_o_f_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_FileExistsError) == 1) return .file_exists_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_FileNotFoundError) == 1) return .file_not_found_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_FloatingPointError) == 1) return .floating_point_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_GeneratorExit) == 1) return .generator_exit;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_ImportError) == 1) return .import_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_IndentationError) == 1) return .indentation_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_IndexError) == 1) return .index_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_InterruptedError) == 1) return .interrupted_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_IsADirectoryError) == 1) return .is_a_directory_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_KeyError) == 1) return .key_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_KeyboardInterrupt) == 1) return .keyboard_interrupt;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_LookupError) == 1) return .lookup_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_MemoryError) == 1) return .memory_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_ModuleNotFoundError) == 1) return .module_not_found_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_NameError) == 1) return .name_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_NotADirectoryError) == 1) return .not_a_directory_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_NotImplementedError) == 1) return .not_implemented_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_OSError) == 1) return .o_s_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_OverflowError) == 1) return .overflow_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_PermissionError) == 1) return .permission_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_ProcessLookupError) == 1) return .process_lookup_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_PythonFinalizationError) == 1) return .python_finalization_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_RecursionError) == 1) return .recursion_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_ReferenceError) == 1) return .reference_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_RuntimeError) == 1) return .runtime_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_StopAsyncIteration) == 1) return .stop_async_iteration;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_StopIteration) == 1) return .stop_iteration;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_SyntaxError) == 1) return .syntax_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_SystemError) == 1) return .system_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_SystemExit) == 1) return .system_exit;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_TabError) == 1) return .tab_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_TimeoutError) == 1) return .timeout_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_TypeError) == 1) return .type_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_UnboundLocalError) == 1) return .unbound_local_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_UnicodeDecodeError) == 1) return .unicode_decode_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_UnicodeEncodeError) == 1) return .unicode_encode_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_UnicodeError) == 1) return .unicode_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_UnicodeTranslateError) == 1) return .unicode_translate_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_ValueError) == 1) return .value_error;
        if (c.PyErr_GivenExceptionMatches(err, c.PyErr_ZeroDivisionError) == 1) return .zero_division_error;

        return .unknown_error;
    }
};