@@ -5,18 +5,6 @@ use pyo3::prelude::*;
5
5
use pyo3:: types:: PyDict ;
6
6
use serde:: de:: { Deserialize , DeserializeSeed , Error as SerdeError , MapAccess , SeqAccess , Visitor } ;
7
7
8
- // taken from `serde_json`
9
- // We only use our own error type; no need for From conversions provided by the
10
- // standard library's try! macro. This reduces lines of LLVM IR by 4%.
11
- macro_rules! tri {
12
- ( $e: expr $( , ) ?) => {
13
- match $e {
14
- Ok ( val) => val,
15
- Err ( err) => return Err ( err) ,
16
- }
17
- } ;
18
- }
19
-
20
8
/// similar to serde `Value` but with int and float split
21
9
#[ derive( Clone , Debug ) ]
22
10
pub enum JsonInput {
@@ -52,7 +40,6 @@ impl ToPyObject for JsonInput {
52
40
}
53
41
54
42
impl < ' de > Deserialize < ' de > for JsonInput {
55
- #[ inline]
56
43
fn deserialize < D > ( deserializer : D ) -> Result < JsonInput , D :: Error >
57
44
where
58
45
D : serde:: Deserializer < ' de > ,
@@ -67,65 +54,58 @@ impl<'de> Deserialize<'de> for JsonInput {
67
54
formatter. write_str ( "any valid JSON value" )
68
55
}
69
56
70
- #[ inline]
71
57
fn visit_bool < E > ( self , value : bool ) -> Result < JsonInput , E > {
72
58
Ok ( JsonInput :: Bool ( value) )
73
59
}
74
60
75
- #[ inline]
76
61
fn visit_i64 < E > ( self , value : i64 ) -> Result < JsonInput , E > {
77
62
Ok ( JsonInput :: Int ( value) )
78
63
}
79
64
80
- #[ inline]
81
65
fn visit_u64 < E > ( self , value : u64 ) -> Result < JsonInput , E > {
82
66
Ok ( JsonInput :: Int ( value as i64 ) )
83
67
}
84
68
85
- #[ inline]
86
69
fn visit_f64 < E > ( self , value : f64 ) -> Result < JsonInput , E > {
87
70
Ok ( JsonInput :: Float ( value) )
88
71
}
89
72
90
- #[ inline]
91
73
fn visit_str < E > ( self , value : & str ) -> Result < JsonInput , E >
92
74
where
93
75
E : SerdeError ,
94
76
{
95
77
Ok ( JsonInput :: String ( value. to_string ( ) ) )
96
78
}
97
79
98
- #[ inline ]
99
- fn visit_string < E > ( self , value : String ) -> Result < JsonInput , E > {
100
- Ok ( JsonInput :: String ( value ) )
80
+ #[ cfg_attr ( has_no_coverage , no_coverage ) ]
81
+ fn visit_string < E > ( self , _ : String ) -> Result < JsonInput , E > {
82
+ unreachable ! ( )
101
83
}
102
84
103
- #[ inline ]
85
+ #[ cfg_attr ( has_no_coverage , no_coverage ) ]
104
86
fn visit_none < E > ( self ) -> Result < JsonInput , E > {
105
- Ok ( JsonInput :: Null )
87
+ unreachable ! ( )
106
88
}
107
89
108
- #[ inline ]
109
- fn visit_some < D > ( self , deserializer : D ) -> Result < JsonInput , D :: Error >
90
+ #[ cfg_attr ( has_no_coverage , no_coverage ) ]
91
+ fn visit_some < D > ( self , _ : D ) -> Result < JsonInput , D :: Error >
110
92
where
111
93
D : serde:: Deserializer < ' de > ,
112
94
{
113
- Deserialize :: deserialize ( deserializer )
95
+ unreachable ! ( )
114
96
}
115
97
116
- #[ inline]
117
98
fn visit_unit < E > ( self ) -> Result < JsonInput , E > {
118
99
Ok ( JsonInput :: Null )
119
100
}
120
101
121
- #[ inline]
122
102
fn visit_seq < V > ( self , mut visitor : V ) -> Result < JsonInput , V :: Error >
123
103
where
124
104
V : SeqAccess < ' de > ,
125
105
{
126
106
let mut vec = Vec :: new ( ) ;
127
107
128
- while let Some ( elem) = tri ! ( visitor. next_element( ) ) {
108
+ while let Some ( elem) = visitor. next_element ( ) ? {
129
109
vec. push ( elem) ;
130
110
}
131
111
@@ -140,8 +120,8 @@ impl<'de> Deserialize<'de> for JsonInput {
140
120
Some ( first_key) => {
141
121
let mut values = IndexMap :: new ( ) ;
142
122
143
- values. insert ( first_key, tri ! ( visitor. next_value( ) ) ) ;
144
- while let Some ( ( key, value) ) = tri ! ( visitor. next_entry( ) ) {
123
+ values. insert ( first_key, visitor. next_value ( ) ? ) ;
124
+ while let Some ( ( key, value) ) = visitor. next_entry ( ) ? {
145
125
values. insert ( key, value) ;
146
126
}
147
127
Ok ( JsonInput :: Object ( values) )
@@ -183,10 +163,11 @@ impl<'de> Visitor<'de> for KeyDeserializer {
183
163
Ok ( s. to_string ( ) )
184
164
}
185
165
186
- fn visit_string < E > ( self , s : String ) -> Result < Self :: Value , E >
166
+ #[ cfg_attr( has_no_coverage, no_coverage) ]
167
+ fn visit_string < E > ( self , _: String ) -> Result < Self :: Value , E >
187
168
where
188
169
E : serde:: de:: Error ,
189
170
{
190
- Ok ( s )
171
+ unreachable ! ( )
191
172
}
192
173
}
0 commit comments