summaryrefslogtreecommitdiff
path: root/src/x/error.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/x/error.cc')
-rw-r--r--src/x/error.cc76
1 files changed, 76 insertions, 0 deletions
diff --git a/src/x/error.cc b/src/x/error.cc
new file mode 100644
index 0000000..5b060c8
--- /dev/null
+++ b/src/x/error.cc
@@ -0,0 +1,76 @@
+// Copyright 2021 Benjamin Barenblat
+//
+// Licensed under the Apache License, Version 2.0 (the "License"); you may not
+// use this file except in compliance with the License. You may obtain a copy of
+// the License at
+//
+// https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+// License for the specific language governing permissions and limitations under
+// the License.
+
+#include "src/x/error.h"
+
+#include <stdint.h>
+#include <xcb/xcb.h>
+
+#include <stdexcept>
+
+#include "src/util.h"
+#include "third_party/abseil/absl/strings/str_cat.h"
+
+namespace x {
+
+namespace {
+
+const char* StatusCodeName(uint8_t code) noexcept {
+ switch (code) {
+ case XCB_REQUEST:
+ return "Request";
+ case XCB_VALUE:
+ return "Value";
+ case XCB_WINDOW:
+ return "Window";
+ case XCB_PIXMAP:
+ return "Pixmap";
+ case XCB_ATOM:
+ return "Atom";
+ case XCB_CURSOR:
+ return "Cursor";
+ case XCB_FONT:
+ return "Font";
+ case XCB_MATCH:
+ return "Match";
+ case XCB_DRAWABLE:
+ return "Drawable";
+ case XCB_ACCESS:
+ return "Access";
+ case XCB_ALLOC:
+ return "Alloc";
+ case XCB_COLORMAP:
+ return "Colormap";
+ case XCB_G_CONTEXT:
+ return "XCB_Context";
+ case XCB_ID_CHOICE:
+ return "XCB_Choice";
+ case XCB_NAME:
+ return "Name";
+ case XCB_LENGTH:
+ return "Length";
+ case XCB_IMPLEMENTATION:
+ return "Implementation";
+ default:
+ DCHECK(false);
+ return "unknown error";
+ }
+}
+
+} // namespace
+
+Error::Error(uint8_t code) noexcept
+ : std::runtime_error(absl::StrCat("X error: ", StatusCodeName(code))) {}
+
+} // namespace x