json_parser.hpp 968 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. //
  2. // json_binder.h
  3. // json
  4. //
  5. // Created by Sam Jaffe on 1/31/16.
  6. // Copyright © 2016 Sam Jaffe. All rights reserved.
  7. //
  8. #ifndef json_parser_h
  9. #define json_parser_h
  10. #pragma once
  11. #include "json.h"
  12. #include <iostream>
  13. namespace json {
  14. namespace binder { template <typename> class visitor; }
  15. namespace parser {
  16. void parse(value& json, char const* data);
  17. template <typename T>
  18. void parse(binder::visitor<T>&, char const*);
  19. template <typename T>
  20. void parse(T& json, std::string const& str) {
  21. parse(json, str.c_str());
  22. }
  23. template <typename T>
  24. void parse(T& json, std::istream & in) {
  25. in.seekg(0, std::ios_base::end);
  26. size_t end = in.tellg();
  27. char data[end];
  28. in.seekg(0);
  29. in.read(data, end);
  30. parse(json, data);
  31. }
  32. template <typename T, typename S>
  33. void parse(binder::visitor<T>&& v, S& s) {
  34. parse(v, s);
  35. }
  36. }
  37. }
  38. #endif /* json_parser_h */