Browse Source

fix: add printers...

Sam Jaffe 1 year ago
parent
commit
b39da52ad0
2 changed files with 84 additions and 35 deletions
  1. 84 0
      include/jvalidate/detail/iostream.h
  2. 0 35
      tests/printer_helper.h

+ 84 - 0
include/jvalidate/detail/iostream.h

@@ -0,0 +1,84 @@
+#pragma once
+
+#include <iostream>
+#include <set>
+#include <unordered_set>
+
+#include <jvalidate/enum.h>
+#include <jvalidate/status.h>
+
+namespace jvalidate::adapter {
+inline std::ostream & operator<<(std::ostream & os, Type type) {
+  switch (type) {
+  case Type::Null:
+    return os << "null";
+  case Type::Boolean:
+    return os << "boolean";
+  case Type::Integer:
+    return os << "integer";
+  case Type::Number:
+    return os << "number";
+  case Type::String:
+    return os << "string";
+  case Type::Array:
+    return os << "array";
+  case Type::Object:
+    return os << "object";
+  }
+}
+}
+
+namespace jvalidate::schema {
+inline std::ostream & operator<<(std::ostream & os, Version version) {
+  switch (version) {
+  case Version::Draft04:
+    return os << "draft4";
+  case Version::Draft06:
+    return os << "draft6";
+  case Version::Draft07:
+    return os << "draft7";
+  case Version::Draft2019_09:
+    return os << "draft2019-09";
+  case Version::Draft2020_12:
+    return os << "draft2020-12";
+  }
+}
+}
+
+namespace jvalidate {
+inline std::ostream & operator<<(std::ostream & os, Status st) {
+  if (st == Status::Accept) {
+    return os << "Accept";
+  }
+  if (st == Status::Reject) {
+    return os << "Reject";
+  }
+  return os << "Noop";
+}
+
+template <typename T>
+inline std::ostream & operator<<(std::ostream & os, std::set<T> const & data) {
+  if (data.size() == 1) {
+    return os << *data.begin();
+  }
+  os << '[';
+  std::string div = " ";
+  for (auto const & elem : data) {
+    os << std::exchange(div, ", ") << elem;
+  }
+  return os << ' ' << ']';
+}
+
+template <typename T>
+inline std::ostream & operator<<(std::ostream & os, std::unordered_set<T> const & data) {
+  if (data.size() == 1) {
+    return os << *data.begin();
+  }
+  os << '[';
+  std::string div = " ";
+  for (auto const & elem : data) {
+    os << std::exchange(div, ", ") << elem;
+  }
+  return os << ' ' << ']';
+}
+}

+ 0 - 35
tests/printer_helper.h

@@ -1,35 +0,0 @@
-#pragma once
-
-#include <iostream>
-
-#include <jvalidate/enum.h>
-#include <jvalidate/status.h>
-
-namespace jvalidate::schema {
-inline std::ostream & operator<<(std::ostream & os, Version version) {
-  switch (version) {
-  case Version::Draft04:
-    return os << "draft4";
-  case Version::Draft06:
-    return os << "draft6";
-  case Version::Draft07:
-    return os << "draft7";
-  case Version::Draft2019_09:
-    return os << "draft2019-09";
-  case Version::Draft2020_12:
-    return os << "draft2020-12";
-  }
-}
-}
-
-namespace jvalidate {
-inline std::ostream & operator<<(std::ostream & os, Status st) {
-  if (st == Status::Accept) {
-    return os << "Accept";
-  }
-  if (st == Status::Reject) {
-    return os << "Reject";
-  }
-  return os << "Noop";
-}
-}