@@ -103,14 +103,33 @@ fn get_pg_config(argument: &str, pgbin: &str) -> String {
103
103
. to_string ( )
104
104
}
105
105
106
- pub fn get_pg_version ( pgbin : & str ) -> String {
106
+ pub fn get_pg_version ( pgbin : & str ) -> PostgresMajorVersion {
107
107
// pg_config --version returns a (platform specific) human readable string
108
108
// such as "PostgreSQL 15.4". We parse this to v14/v15/v16 etc.
109
109
let human_version = get_pg_config ( "--version" , pgbin) ;
110
- parse_pg_version ( & human_version) . to_string ( )
110
+ parse_pg_version ( & human_version)
111
111
}
112
112
113
- fn parse_pg_version ( human_version : & str ) -> & str {
113
+ pub fn get_pg_version_string ( pgbin : & str ) -> String {
114
+ match get_pg_version ( pgbin) {
115
+ PostgresMajorVersion :: V14 => "v14" ,
116
+ PostgresMajorVersion :: V15 => "v15" ,
117
+ PostgresMajorVersion :: V16 => "v16" ,
118
+ PostgresMajorVersion :: V17 => "v17" ,
119
+ }
120
+ . to_owned ( )
121
+ }
122
+
123
+ #[ derive( Copy , Clone , Debug , PartialEq , Eq ) ]
124
+ pub enum PostgresMajorVersion {
125
+ V14 ,
126
+ V15 ,
127
+ V16 ,
128
+ V17 ,
129
+ }
130
+
131
+ fn parse_pg_version ( human_version : & str ) -> PostgresMajorVersion {
132
+ use PostgresMajorVersion :: * ;
114
133
// Normal releases have version strings like "PostgreSQL 15.4". But there
115
134
// are also pre-release versions like "PostgreSQL 17devel" or "PostgreSQL
116
135
// 16beta2" or "PostgreSQL 17rc1". And with the --with-extra-version
@@ -121,10 +140,10 @@ fn parse_pg_version(human_version: &str) -> &str {
121
140
. captures ( human_version)
122
141
{
123
142
Some ( captures) if captures. len ( ) == 2 => match & captures[ "major" ] {
124
- "14" => return "v14" ,
125
- "15" => return "v15" ,
126
- "16" => return "v16" ,
127
- "17" => return "v17" ,
143
+ "14" => return V14 ,
144
+ "15" => return V15 ,
145
+ "16" => return V16 ,
146
+ "17" => return V17 ,
128
147
_ => { }
129
148
} ,
130
149
_ => { }
@@ -263,24 +282,25 @@ mod tests {
263
282
264
283
#[ test]
265
284
fn test_parse_pg_version ( ) {
266
- assert_eq ! ( parse_pg_version( "PostgreSQL 15.4" ) , "v15" ) ;
267
- assert_eq ! ( parse_pg_version( "PostgreSQL 15.14" ) , "v15" ) ;
285
+ use super :: PostgresMajorVersion :: * ;
286
+ assert_eq ! ( parse_pg_version( "PostgreSQL 15.4" ) , V15 ) ;
287
+ assert_eq ! ( parse_pg_version( "PostgreSQL 15.14" ) , V15 ) ;
268
288
assert_eq ! (
269
289
parse_pg_version( "PostgreSQL 15.4 (Ubuntu 15.4-0ubuntu0.23.04.1)" ) ,
270
- "v15"
290
+ V15
271
291
) ;
272
292
273
- assert_eq ! ( parse_pg_version( "PostgreSQL 14.15" ) , "v14" ) ;
274
- assert_eq ! ( parse_pg_version( "PostgreSQL 14.0" ) , "v14" ) ;
293
+ assert_eq ! ( parse_pg_version( "PostgreSQL 14.15" ) , V14 ) ;
294
+ assert_eq ! ( parse_pg_version( "PostgreSQL 14.0" ) , V14 ) ;
275
295
assert_eq ! (
276
296
parse_pg_version( "PostgreSQL 14.9 (Debian 14.9-1.pgdg120+1" ) ,
277
- "v14"
297
+ V14
278
298
) ;
279
299
280
- assert_eq ! ( parse_pg_version( "PostgreSQL 16devel" ) , "v16" ) ;
281
- assert_eq ! ( parse_pg_version( "PostgreSQL 16beta1" ) , "v16" ) ;
282
- assert_eq ! ( parse_pg_version( "PostgreSQL 16rc2" ) , "v16" ) ;
283
- assert_eq ! ( parse_pg_version( "PostgreSQL 16extra" ) , "v16" ) ;
300
+ assert_eq ! ( parse_pg_version( "PostgreSQL 16devel" ) , V16 ) ;
301
+ assert_eq ! ( parse_pg_version( "PostgreSQL 16beta1" ) , V16 ) ;
302
+ assert_eq ! ( parse_pg_version( "PostgreSQL 16rc2" ) , V16 ) ;
303
+ assert_eq ! ( parse_pg_version( "PostgreSQL 16extra" ) , V16 ) ;
284
304
}
285
305
286
306
#[ test]
0 commit comments