1 bcf3fb81 2023-08-16 continue /** Errors handling */
3 bcf3fb81 2023-08-16 continue #include <errno.h>
4 bcf3fb81 2023-08-16 continue #include <string.h>
5 bcf3fb81 2023-08-16 continue #include <ostream>
7 bcf3fb81 2023-08-16 continue #pragma once
10 bcf3fb81 2023-08-16 continue namespace vostok
12 bcf3fb81 2023-08-16 continue namespace error
16 bcf3fb81 2023-08-16 continue /** Current output log stream (`std::err` on starup) */
17 bcf3fb81 2023-08-16 continue extern std::ostream &g_log;
20 bcf3fb81 2023-08-16 continue /** Default error code (errno) printer */
21 d6e3180e 2023-08-30 continue class Print
24 d6e3180e 2023-08-30 continue explicit Print(int error=errno) : m_error{error} {}
25 bcf3fb81 2023-08-16 continue void operator() () const
27 2f4289de 2023-08-30 continue g_log << "Error code (" << std::dec << m_error << "): " << strerror(m_error);
30 d6e3180e 2023-08-30 continue private:
31 d6e3180e 2023-08-30 continue const int m_error;
35 bcf3fb81 2023-08-16 continue /** Empty error code printer */
36 d6e3180e 2023-08-30 continue class None
39 bcf3fb81 2023-08-16 continue void operator() () const {}
43 bcf3fb81 2023-08-16 continue /** Error handler: print action, print error */
44 bcf3fb81 2023-08-16 continue template<
45 d6e3180e 2023-08-30 continue typename PrintAction,
46 d6e3180e 2023-08-30 continue typename PrintError
49 bcf3fb81 2023-08-16 continue occurred(
50 d6e3180e 2023-08-30 continue PrintAction print_action,
51 d6e3180e 2023-08-30 continue PrintError print_error
54 bcf3fb81 2023-08-16 continue print_action();
55 2f4289de 2023-08-30 continue g_log << " failed. ";
56 bcf3fb81 2023-08-16 continue print_error();
57 2f4289de 2023-08-30 continue g_log << std::endl;
60 bcf3fb81 2023-08-16 continue template<typename TPrintError>
62 bcf3fb81 2023-08-16 continue occurred(
63 bcf3fb81 2023-08-16 continue const char *action,
64 bcf3fb81 2023-08-16 continue TPrintError print_error
67 bcf3fb81 2023-08-16 continue occurred(
68 bcf3fb81 2023-08-16 continue [action]
70 bcf3fb81 2023-08-16 continue g_log << action;
72 bcf3fb81 2023-08-16 continue print_error
77 bcf3fb81 2023-08-16 continue } // namespace error
78 bcf3fb81 2023-08-16 continue } // namespace vostok