44//!
55//! The responses are calculated in the server.rs file.
66
7+ use serde:: de:: { DeserializeOwned , Error } ;
8+ use serde:: Deserializer ;
9+ use std:: fmt:: Formatter ;
10+ use std:: marker:: PhantomData ;
711use std:: result:: Result as StdResult ;
812
913pub type ServerResult < T > = StdResult < T , String > ;
1014
15+ // Deserializes a comma separated list of GraphKind values
16+ fn vec_from_comma_separated < ' de , T : DeserializeOwned , D > (
17+ deserializer : D ,
18+ ) -> Result < Vec < T > , D :: Error >
19+ where
20+ D : Deserializer < ' de > ,
21+ {
22+ struct CommaSeparatedVisitor < T > ( PhantomData < T > ) ;
23+
24+ impl < ' de , T : DeserializeOwned > serde:: de:: Visitor < ' de > for CommaSeparatedVisitor < T > {
25+ type Value = Vec < T > ;
26+
27+ fn expecting ( & self , formatter : & mut Formatter ) -> std:: fmt:: Result {
28+ formatter. write_str ( "comma separated list of GraphKind values" )
29+ }
30+
31+ fn visit_str < E > ( self , v : & str ) -> Result < Self :: Value , E >
32+ where
33+ E : Error ,
34+ {
35+ v. split ( ',' )
36+ . map ( |v| T :: deserialize ( serde:: de:: value:: StrDeserializer :: new ( v) ) )
37+ . collect :: < Result < Vec < T > , _ > > ( )
38+ }
39+ }
40+
41+ deserializer. deserialize_str ( CommaSeparatedVisitor ( Default :: default ( ) ) )
42+ }
43+
1144pub mod info {
1245 use database:: Date ;
1346 use serde:: Serialize ;
@@ -112,11 +145,9 @@ pub mod graphs {
112145
113146pub mod detail_graphs {
114147 use crate :: api:: graphs:: { GraphKind , Series } ;
148+ use crate :: api:: vec_from_comma_separated;
115149 use collector:: Bound ;
116- use serde:: de:: { DeserializeOwned , Error } ;
117- use serde:: { Deserialize , Deserializer , Serialize } ;
118- use std:: fmt:: Formatter ;
119- use std:: marker:: PhantomData ;
150+ use serde:: { Deserialize , Serialize } ;
120151
121152 #[ derive( Debug , PartialEq , Clone , Serialize , Deserialize ) ]
122153 pub struct Request {
@@ -130,35 +161,6 @@ pub mod detail_graphs {
130161 pub kinds : Vec < GraphKind > ,
131162 }
132163
133- // Deserializes a comma separated list of GraphKind values
134- fn vec_from_comma_separated < ' de , T : DeserializeOwned , D > (
135- deserializer : D ,
136- ) -> Result < Vec < T > , D :: Error >
137- where
138- D : Deserializer < ' de > ,
139- {
140- struct CommaSeparatedVisitor < T > ( PhantomData < T > ) ;
141-
142- impl < ' de , T : DeserializeOwned > serde:: de:: Visitor < ' de > for CommaSeparatedVisitor < T > {
143- type Value = Vec < T > ;
144-
145- fn expecting ( & self , formatter : & mut Formatter ) -> std:: fmt:: Result {
146- formatter. write_str ( "comma separated list of GraphKind values" )
147- }
148-
149- fn visit_str < E > ( self , v : & str ) -> Result < Self :: Value , E >
150- where
151- E : Error ,
152- {
153- v. split ( ',' )
154- . map ( |v| T :: deserialize ( serde:: de:: value:: StrDeserializer :: new ( v) ) )
155- . collect :: < Result < Vec < T > , _ > > ( )
156- }
157- }
158-
159- deserializer. deserialize_str ( CommaSeparatedVisitor ( Default :: default ( ) ) )
160- }
161-
162164 #[ derive( Debug , Serialize ) ]
163165 pub struct Response {
164166 pub commits : Vec < ( i64 , String ) > ,
@@ -203,11 +205,9 @@ pub mod detail_sections {
203205
204206pub mod runtime_detail_graphs {
205207 use crate :: api:: graphs:: { GraphKind , Series } ;
208+ use crate :: api:: vec_from_comma_separated;
206209 use collector:: Bound ;
207- use serde:: de:: { DeserializeOwned , Error } ;
208- use serde:: { Deserialize , Deserializer , Serialize } ;
209- use std:: fmt:: Formatter ;
210- use std:: marker:: PhantomData ;
210+ use serde:: { Deserialize , Serialize } ;
211211
212212 #[ derive( Debug , PartialEq , Clone , Serialize , Deserialize ) ]
213213 pub struct Request {
@@ -219,35 +219,6 @@ pub mod runtime_detail_graphs {
219219 pub kinds : Vec < GraphKind > ,
220220 }
221221
222- // Deserializes a comma separated list of GraphKind values
223- fn vec_from_comma_separated < ' de , T : DeserializeOwned , D > (
224- deserializer : D ,
225- ) -> Result < Vec < T > , D :: Error >
226- where
227- D : Deserializer < ' de > ,
228- {
229- struct CommaSeparatedVisitor < T > ( PhantomData < T > ) ;
230-
231- impl < ' de , T : DeserializeOwned > serde:: de:: Visitor < ' de > for CommaSeparatedVisitor < T > {
232- type Value = Vec < T > ;
233-
234- fn expecting ( & self , formatter : & mut Formatter ) -> std:: fmt:: Result {
235- formatter. write_str ( "comma separated list of GraphKind values" )
236- }
237-
238- fn visit_str < E > ( self , v : & str ) -> Result < Self :: Value , E >
239- where
240- E : Error ,
241- {
242- v. split ( ',' )
243- . map ( |v| T :: deserialize ( serde:: de:: value:: StrDeserializer :: new ( v) ) )
244- . collect :: < Result < Vec < T > , _ > > ( )
245- }
246- }
247-
248- deserializer. deserialize_str ( CommaSeparatedVisitor ( Default :: default ( ) ) )
249- }
250-
251222 #[ derive( Debug , Serialize ) ]
252223 pub struct Response {
253224 pub commits : Vec < ( i64 , String ) > ,
0 commit comments