@@ -2010,6 +2010,43 @@ class pair_reader : public generic_typed_reader<pair_reader<T>>
2010
2010
}
2011
2011
};
2012
2012
2013
+ // Reads into a vector of pairs in the format (example)
2014
+ // "growth_stages": [ { "GROWTH_SEED": "23 days" }, { "GROWTH_SEEDLING": "23 days" }, { "GROWTH_MATURE": "23 days" }, { "GROWTH_HARVEST": "22 days" } ]
2015
+ // OR
2016
+ // "growth_stages": [ [ "GROWTH_SEED", "23 days" ], [ "GROWTH_SEEDLING", "23 days" ], [ "GROWTH_MATURE", "23 days" ], [ "GROWTH_HARVEST", "22 days" ] ]
2017
+ // The key(K) of the pair object must be string constructable.
2018
+ template <typename K, typename V>
2019
+ class vector_pair_reader : public generic_typed_reader <vector_pair_reader<K, V>>
2020
+ {
2021
+ public:
2022
+ std::pair<K, V> get_next ( const JsonValue &jv ) const {
2023
+ if ( jv.test_object () ) {
2024
+ JsonObject jo = jv.get_object ();
2025
+ if ( jo.size () != 1 ) {
2026
+ jv.throw_error ( string_format ( " Expected size of 1 for JsonObject, found size %d" , jo.size () ) );
2027
+ }
2028
+ for ( JsonMember jm : jo ) {
2029
+ K key ( jm.name () );
2030
+ V ret;
2031
+ jm.read ( ret );
2032
+ return std::make_pair ( key, ret );
2033
+ }
2034
+ }
2035
+ if ( !jv.test_array () ) {
2036
+ jv.throw_error ( " bad pair" );
2037
+ }
2038
+ JsonArray ja = jv.get_array ();
2039
+ if ( ja.size () != 2 ) {
2040
+ ja.throw_error ( " Must have 2 elements" );
2041
+ }
2042
+ K l;
2043
+ V h;
2044
+ ja[0 ].read ( l, true );
2045
+ ja[1 ].read ( h, true );
2046
+ return std::make_pair ( l, h );
2047
+ }
2048
+ };
2049
+
2013
2050
template <typename T1, typename T2>
2014
2051
class named_pair_reader : public generic_typed_reader <named_pair_reader<T1, T2>>
2015
2052
{
0 commit comments