@@ -10,39 +10,6 @@ use object::Object;
10
10
11
11
use { JsonValue , Null } ;
12
12
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
-
46
13
macro_rules! implement_eq {
47
14
( $to: ident, $from: ty) => {
48
15
impl PartialEq <$from> for JsonValue {
@@ -83,7 +50,7 @@ macro_rules! implement {
83
50
}
84
51
85
52
implement_eq!( $to, $from) ;
86
- implement_extras!( $from) ;
53
+ // implement_extras!($from);
87
54
} ;
88
55
( $to: ident, $from: ty) => {
89
56
impl From <$from> for JsonValue {
@@ -93,7 +60,7 @@ macro_rules! implement {
93
60
}
94
61
95
62
implement_eq!( $to, $from) ;
96
- implement_extras!( $from) ;
63
+ // implement_extras!($from);
97
64
}
98
65
}
99
66
@@ -107,15 +74,27 @@ impl<'a> From<&'a str> for JsonValue {
107
74
}
108
75
}
109
76
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 {
112
79
match val {
113
- Some ( value ) => value . into ( ) ,
114
- None => Null ,
80
+ Some ( val ) => val . into ( ) ,
81
+ None => JsonValue :: Null ,
115
82
}
116
83
}
117
84
}
118
85
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
+
119
98
impl From < HashMap < String , JsonValue > > for JsonValue {
120
99
fn from ( mut val : HashMap < String , JsonValue > ) -> JsonValue {
121
100
let mut object = Object :: with_capacity ( val. len ( ) ) ;
@@ -128,15 +107,6 @@ impl From<HashMap<String, JsonValue>> for JsonValue {
128
107
}
129
108
}
130
109
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
-
140
110
impl From < BTreeMap < String , JsonValue > > for JsonValue {
141
111
fn from ( mut val : BTreeMap < String , JsonValue > ) -> JsonValue {
142
112
let mut object = Object :: with_capacity ( val. len ( ) ) ;
@@ -153,24 +123,6 @@ impl From<BTreeMap<String, JsonValue>> for JsonValue {
153
123
}
154
124
}
155
125
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
-
174
126
impl < ' a > PartialEq < & ' a str > for JsonValue {
175
127
fn eq ( & self , other : & & str ) -> bool {
176
128
match * self {
@@ -226,5 +178,4 @@ implement!(Number, f32 as num);
226
178
implement ! ( Number , f64 as num) ;
227
179
implement ! ( Number , Number ) ;
228
180
implement ! ( Object , Object ) ;
229
- implement ! ( Array , Vec <JsonValue >) ;
230
181
implement ! ( Boolean , bool ) ;
0 commit comments