Skip to content

Commit cd747c1

Browse files
committed
unify the vec_from_comma_separated func
1 parent 7f031fb commit cd747c1

File tree

1 file changed

+37
-66
lines changed

1 file changed

+37
-66
lines changed

site/src/api.rs

Lines changed: 37 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,43 @@
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;
711
use std::result::Result as StdResult;
812

913
pub 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+
1144
pub mod info {
1245
use database::Date;
1346
use serde::Serialize;
@@ -112,11 +145,9 @@ pub mod graphs {
112145

113146
pub 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

204206
pub 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

Comments
 (0)