@@ -10,39 +10,6 @@ use object::Object;
1010
1111use { JsonValue , Null } ;
1212
13- macro_rules! implement_extras {
14- ( $from: ty) => {
15- impl From <Option <$from>> for JsonValue {
16- fn from( val: Option <$from>) -> JsonValue {
17- match val {
18- Some ( value) => value. into( ) ,
19- None => Null ,
20- }
21- }
22- }
23-
24- impl From <Vec <$from>> for JsonValue {
25- fn from( mut val: Vec <$from>) -> JsonValue {
26- JsonValue :: Array (
27- val. drain( ..)
28- . map( |value| value. into( ) )
29- . collect( )
30- )
31- }
32- }
33-
34- impl From <Vec <Option <$from>>> for JsonValue {
35- fn from( mut val: Vec <Option <$from>>) -> JsonValue {
36- JsonValue :: Array (
37- val. drain( ..)
38- . map( |item| item. into( ) )
39- . collect( )
40- )
41- }
42- }
43- }
44- }
45-
4613macro_rules! implement_eq {
4714 ( $to: ident, $from: ty) => {
4815 impl PartialEq <$from> for JsonValue {
@@ -83,7 +50,7 @@ macro_rules! implement {
8350 }
8451
8552 implement_eq!( $to, $from) ;
86- implement_extras!( $from) ;
53+ // implement_extras!($from);
8754 } ;
8855 ( $to: ident, $from: ty) => {
8956 impl From <$from> for JsonValue {
@@ -93,7 +60,7 @@ macro_rules! implement {
9360 }
9461
9562 implement_eq!( $to, $from) ;
96- implement_extras!( $from) ;
63+ // implement_extras!($from);
9764 }
9865}
9966
@@ -107,15 +74,27 @@ impl<'a> From<&'a str> for JsonValue {
10774 }
10875}
10976
110- impl < ' a > From < Option < & ' a str > > for JsonValue {
111- fn from ( val : Option < & ' a str > ) -> JsonValue {
77+ impl < T : Into < JsonValue > > From < Option < T > > for JsonValue {
78+ fn from ( val : Option < T > ) -> JsonValue {
11279 match val {
113- Some ( value ) => value . into ( ) ,
114- None => Null ,
80+ Some ( val ) => val . into ( ) ,
81+ None => JsonValue :: Null ,
11582 }
11683 }
11784}
11885
86+ impl < T : Into < JsonValue > > From < Vec < T > > for JsonValue {
87+ fn from ( val : Vec < T > ) -> JsonValue {
88+ let mut array = Vec :: with_capacity ( val. len ( ) ) ;
89+
90+ for val in val {
91+ array. push ( val. into ( ) ) ;
92+ }
93+
94+ JsonValue :: Array ( array)
95+ }
96+ }
97+
11998impl From < HashMap < String , JsonValue > > for JsonValue {
12099 fn from ( mut val : HashMap < String , JsonValue > ) -> JsonValue {
121100 let mut object = Object :: with_capacity ( val. len ( ) ) ;
@@ -128,15 +107,6 @@ impl From<HashMap<String, JsonValue>> for JsonValue {
128107 }
129108}
130109
131- impl From < Option < HashMap < String , JsonValue > > > for JsonValue {
132- fn from ( val : Option < HashMap < String , JsonValue > > ) -> JsonValue {
133- match val {
134- Some ( value) => value. into ( ) ,
135- None => Null ,
136- }
137- }
138- }
139-
140110impl From < BTreeMap < String , JsonValue > > for JsonValue {
141111 fn from ( mut val : BTreeMap < String , JsonValue > ) -> JsonValue {
142112 let mut object = Object :: with_capacity ( val. len ( ) ) ;
@@ -153,24 +123,6 @@ impl From<BTreeMap<String, JsonValue>> for JsonValue {
153123 }
154124}
155125
156- impl From < Option < BTreeMap < String , JsonValue > > > for JsonValue {
157- fn from ( val : Option < BTreeMap < String , JsonValue > > ) -> JsonValue {
158- match val {
159- Some ( value) => value. into ( ) ,
160- None => Null ,
161- }
162- }
163- }
164-
165- impl From < Option < JsonValue > > for JsonValue {
166- fn from ( val : Option < JsonValue > ) -> JsonValue {
167- match val {
168- Some ( value) => value,
169- None => Null ,
170- }
171- }
172- }
173-
174126impl < ' a > PartialEq < & ' a str > for JsonValue {
175127 fn eq ( & self , other : & & str ) -> bool {
176128 match * self {
@@ -226,5 +178,4 @@ implement!(Number, f32 as num);
226178implement ! ( Number , f64 as num) ;
227179implement ! ( Number , Number ) ;
228180implement ! ( Object , Object ) ;
229- implement ! ( Array , Vec <JsonValue >) ;
230181implement ! ( Boolean , bool ) ;
0 commit comments