1#![deny(missing_docs)]
2
3mod args;
8mod builtin;
9mod coll;
10mod extensions;
11mod highlighter;
12mod metadata;
13
14use std::{fmt::Display, str::FromStr};
15
16pub use self::{
17 args::{CliSubCommand, DaemonControlArgs, InitializeArgs, SqlFunArgs, SqlFunArgsError},
18 builtin::PostgresBuiltinPaths,
19 coll::IVec,
20 extensions::{
21 ExtensionConfigError, ExtensionNameVersionPair, ExtensionVersion,
22 PostgresExtensionsCollection,
23 },
24 highlighter::{HighlighterStyle, HighlighterTheme, HighlighterThemeError, TerminalColor},
25 metadata::{MetadataError, SqlFunMetadata},
26};
27
28#[derive(Debug, serde::Deserialize, serde::Serialize, Clone, Copy, PartialEq)]
30pub enum PostgresVersion {
31 #[serde(rename = "15")]
33 Ver15,
34 #[serde(rename = "16")]
36 Ver16,
37 #[serde(rename = "17")]
39 Ver17,
40
41 #[cfg(feature = "beta_postgres_versions")]
42 #[serde(rename = "18")]
43 Ver18,
44}
45
46impl FromStr for PostgresVersion {
47 type Err = String;
48
49 fn from_str(s: &str) -> Result<Self, Self::Err> {
50 match s {
51 "15" => Ok(PostgresVersion::Ver15),
52 "16" => Ok(PostgresVersion::Ver16),
53 "17" => Ok(PostgresVersion::Ver17),
54 #[cfg(feature = "beta_postgres_versions")]
55 "18" => Ok(PostgresVersion::Ver18),
56 _ => Err(s.to_string()),
57 }
58 }
59}
60
61impl Display for PostgresVersion {
62 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
63 let value = match self {
64 PostgresVersion::Ver15 => "15",
65 PostgresVersion::Ver16 => "16",
66 PostgresVersion::Ver17 => "17",
67 #[cfg(feature = "beta_postgres_versions")]
68 PostgresVersion::Ver18 => "18",
69 };
70 f.write_str(value)
71 }
72}
73
74#[derive(Debug, serde::Deserialize, Clone, Copy, PartialEq)]
76pub enum SqlDialect {
77 #[serde(rename = "postgres")]
79 PostgreSQL,
80}
81
82impl FromStr for SqlDialect {
83 type Err = String;
84
85 fn from_str(s: &str) -> Result<Self, Self::Err> {
86 if s.to_lowercase() == "postgresql" {
87 return Ok(Self::PostgreSQL);
88 }
89 Err(s.to_string())
90 }
91}
92
93impl Display for SqlDialect {
94 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
95 match self {
96 SqlDialect::PostgreSQL => write!(f, "postgresql"),
97 }
98 }
99}