@@ -65,6 +65,7 @@ named!(
65
65
separated_pair!( ws!( string) , char !( ':' ) , value)
66
66
) ;
67
67
68
+ /*
68
69
named!(
69
70
hash<HashMap<&str, JsonValue>>,
70
71
map!(
@@ -78,6 +79,42 @@ named!(
78
79
.collect()
79
80
)
80
81
);
82
+ */
83
+
84
+ fn hash_internal ( input : & [ u8 ] ) -> nom:: IResult < & [ u8 ] , HashMap < & str , JsonValue > > {
85
+ match key_value ( input) {
86
+ Err ( nom:: Err :: Error ( _) ) => Ok ( ( input, HashMap :: default ( ) ) ) ,
87
+ Err ( e) => Err ( e) ,
88
+ Ok ( ( i, ( key, value) ) ) => {
89
+ let mut map = HashMap :: default ( ) ;
90
+ map. insert ( key, value) ;
91
+
92
+ let mut input = i;
93
+ loop {
94
+ match do_parse ! ( input, sp >> char !( ',' ) >> kv: key_value >> ( kv) ) {
95
+ Err ( nom:: Err :: Error ( _) ) => break Ok ( ( input, map) ) ,
96
+ Err ( e) => break Err ( e) ,
97
+ Ok ( ( i, ( key, value) ) ) => {
98
+ map. insert ( key, value) ;
99
+ input = i;
100
+ }
101
+ }
102
+ }
103
+ }
104
+ }
105
+
106
+ }
107
+
108
+ named ! (
109
+ hash<HashMap <& str , JsonValue >>,
110
+ delimited!(
111
+ char !( '{' ) ,
112
+ return_error!(
113
+ hash_internal
114
+ ) ,
115
+ preceded!( sp, char !( '}' ) )
116
+ )
117
+ ) ;
81
118
82
119
named ! (
83
120
value<JsonValue >,
0 commit comments