@@ -22,6 +22,8 @@ pub(crate) mod queue_builder;
2222mod rustc_version;
2323use anyhow:: Result ;
2424use postgres:: Client ;
25+ use serde:: de:: DeserializeOwned ;
26+ use serde:: Serialize ;
2527pub ( crate ) mod sized_buffer;
2628
2729pub ( crate ) const APP_USER_AGENT : & str = concat ! (
@@ -50,25 +52,29 @@ pub enum ConfigName {
5052pub 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 } ) ;
0 commit comments