Skip to content

Commit ffe561e

Browse files
committed
refactor get/set_config with serde::De/Serialize
1 parent 8eae19a commit ffe561e

File tree

5 files changed

+26
-27
lines changed

5 files changed

+26
-27
lines changed

src/bin/cratesfyi.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,7 @@ impl BuildSubcommand {
365365
.get()
366366
.context("failed to get a database connection")?;
367367

368-
if get_config(&mut conn, ConfigName::RustcVersion)?.is_string() {
368+
if get_config::<String>(&mut conn, ConfigName::RustcVersion)?.is_some() {
369369
println!("update-toolchain was already called in the past, exiting");
370370
return Ok(());
371371
}

src/build_queue.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@ impl BuildQueue {
4949

5050
pub fn last_seen_reference(&self) -> Result<Option<Oid>> {
5151
let mut conn = self.db.get()?;
52-
if let Some(value) = get_config(&mut conn, ConfigName::LastSeenIndexReference)?.as_str() {
53-
return Ok(Some(Oid::from_str(value)?));
52+
if let Some(value) = get_config::<String>(&mut conn, ConfigName::LastSeenIndexReference)? {
53+
return Ok(Some(Oid::from_str(&value)?));
5454
}
5555
Ok(None)
5656
}
@@ -204,9 +204,7 @@ impl BuildQueue {
204204
pub fn is_locked(&self) -> Result<bool> {
205205
let mut conn = self.db.get()?;
206206

207-
Ok(get_config(&mut conn, ConfigName::QueueLocked)?
208-
.as_bool()
209-
.unwrap_or(false))
207+
Ok(get_config::<bool>(&mut conn, ConfigName::QueueLocked)?.unwrap_or(false))
210208
}
211209

212210
/// lock the queue. Daemon will check this lock and stop operating if it exists.

src/utils/mod.rs

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ pub(crate) mod queue_builder;
2222
mod rustc_version;
2323
use anyhow::Result;
2424
use postgres::Client;
25+
use serde::de::DeserializeOwned;
26+
use serde::Serialize;
2527
pub(crate) mod sized_buffer;
2628

2729
pub(crate) const APP_USER_AGENT: &str = concat!(
@@ -50,25 +52,29 @@ pub enum ConfigName {
5052
pub fn set_config(
5153
conn: &mut Client,
5254
name: ConfigName,
53-
value: impl Into<serde_json::Value>,
55+
value: impl Serialize,
5456
) -> anyhow::Result<()> {
5557
let name: &'static str = name.into();
5658
conn.execute(
5759
"INSERT INTO config (name, value)
5860
VALUES ($1, $2)
5961
ON CONFLICT (name) DO UPDATE SET value = $2;",
60-
&[&name, &value.into()],
62+
&[&name, &serde_json::to_value(value)?],
6163
)?;
6264
Ok(())
6365
}
6466

65-
pub fn get_config(conn: &mut Client, name: ConfigName) -> Result<serde_json::Value> {
67+
pub fn get_config<T>(conn: &mut Client, name: ConfigName) -> Result<Option<T>>
68+
where
69+
T: DeserializeOwned,
70+
{
6671
let name: &'static str = name.into();
67-
Ok(conn
68-
.query_opt("SELECT value FROM config WHERE name = $1;", &[&name])?
69-
.map_or(serde_json::Value::Null, |row| {
70-
row.get::<_, serde_json::Value>("value")
71-
}))
72+
Ok(
73+
match conn.query_opt("SELECT value FROM config WHERE name = $1;", &[&name])? {
74+
Some(row) => serde_json::from_value(row.get("value"))?,
75+
None => None,
76+
},
77+
)
7278
}
7379

7480
#[cfg(test)]
@@ -92,10 +98,7 @@ mod tests {
9298
let mut conn = env.db().conn();
9399
conn.execute("DELETE FROM config", &[])?;
94100

95-
assert_eq!(
96-
get_config(&mut conn, ConfigName::RustcVersion)?,
97-
Value::Null
98-
);
101+
assert!(get_config::<String>(&mut conn, ConfigName::RustcVersion)?.is_none());
99102
Ok(())
100103
});
101104
}
@@ -106,10 +109,7 @@ mod tests {
106109
let mut conn = env.db().conn();
107110
conn.execute("DELETE FROM config", &[])?;
108111

109-
assert_eq!(
110-
get_config(&mut conn, ConfigName::RustcVersion)?,
111-
Value::Null
112-
);
112+
assert!(get_config::<String>(&mut conn, ConfigName::RustcVersion)?.is_none());
113113

114114
set_config(
115115
&mut conn,
@@ -118,7 +118,7 @@ mod tests {
118118
)?;
119119
assert_eq!(
120120
get_config(&mut conn, ConfigName::RustcVersion)?,
121-
Value::String("some value".into())
121+
Some("some value".to_string())
122122
);
123123
Ok(())
124124
});

src/web/page/templates.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ impl TemplateData {
3434
}
3535

3636
fn load_rustc_resource_suffix(conn: &mut Client) -> Result<String> {
37-
if let Some(vers_str) = get_config(conn, ConfigName::RustcVersion)?.as_str() {
37+
if let Some(vers_str) = get_config::<String>(conn, ConfigName::RustcVersion)? {
3838
return crate::utils::parse_rustc_version(vers_str);
3939
}
4040

src/web/sitemap.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -109,9 +109,10 @@ impl_webpage!(AboutBuilds = "core/about/builds.html");
109109
pub fn about_builds_handler(req: &mut Request) -> IronResult<Response> {
110110
let mut conn = extension!(req, Pool).get()?;
111111

112-
let rustc_version = ctry!(req, get_config(&mut conn, ConfigName::RustcVersion))
113-
.as_str()
114-
.map(str::to_owned);
112+
let rustc_version = ctry!(
113+
req,
114+
get_config::<String>(&mut conn, ConfigName::RustcVersion)
115+
);
115116

116117
AboutBuilds {
117118
rustc_version,

0 commit comments

Comments
 (0)