properties.h 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. //
  2. // properties.hpp
  3. // logger
  4. //
  5. // Created by Sam Jaffe on 10/3/15.
  6. //
  7. //
  8. #pragma once
  9. #include <map>
  10. #include <string>
  11. #include <vector>
  12. #include "variant/variant.hpp"
  13. namespace logging {
  14. struct properties;
  15. using object_t = std::map<std::string, properties>;
  16. using array_t = std::vector<properties>;
  17. struct properties {
  18. variant<object_t, array_t, std::string, int, bool> data;
  19. properties mergedWith(properties const & other) const;
  20. bool contains(std::string const & key) const;
  21. bool contains(std::size_t idx) const;
  22. object_t const & object() const;
  23. array_t const & array() const;
  24. properties const & operator[](std::string const & key) const;
  25. properties const & operator[](char const * key) const {
  26. return operator[](std::string(key));
  27. }
  28. properties const & operator[](std::size_t idx) const;
  29. operator std::string const &() const;
  30. std::string const & str() const;
  31. operator int() const;
  32. operator bool() const;
  33. };
  34. namespace property {
  35. inline properties _obj(object_t const & m) { return {m}; }
  36. inline properties _arr(array_t const & l) { return {l}; }
  37. inline properties _v(std::string const & t) { return {t}; }
  38. // [char const *] will cast to [int] over [std::string const &]
  39. inline properties _v(char const * t) { return {std::string(t)}; }
  40. inline properties _v(int t) { return {t}; }
  41. inline properties _v(bool t) { return {t}; }
  42. }
  43. extern properties const DEFAULT_APPENDER_SCHEMA;
  44. extern properties const DEFAULT_LOGGER_SCHEMA;
  45. }