Skip to main content

sql_fun_core/
lib.rs

1#![deny(missing_docs)]
2
3//! sql-fun-core library
4//!
5//! This library defines sql-fun's internal communication data objects.
6
7mod 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/// Supporting `PostgreSQL` Database engine versions
29#[derive(Debug, serde::Deserialize, serde::Serialize, Clone, Copy, PartialEq)]
30pub enum PostgresVersion {
31    /// `PostgreSQL` version 15
32    #[serde(rename = "15")]
33    Ver15,
34    /// `PostgreSQL` version 16
35    #[serde(rename = "16")]
36    Ver16,
37    /// `PostgreSQL` version 17
38    #[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/// SQL Dialect
75#[derive(Debug, serde::Deserialize, Clone, Copy, PartialEq)]
76pub enum SqlDialect {
77    /// postgres using a `pg_query` crate for parsing a syntax.
78    #[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}