json_parser.hpp 1004 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  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 <iostream>
  12. namespace json {
  13. class value;
  14. namespace binder { template <typename, typename> class visitor; }
  15. namespace parser {
  16. void parse(value& json, char const* data);
  17. template <typename T, typename S>
  18. void parse(binder::visitor<T, S>&, 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, typename V>
  33. void parse(binder::visitor<T, S>&& v, V& s) {
  34. parse(v, s);
  35. }
  36. }
  37. }
  38. #endif /* json_parser_h */