elefant_tools/models/
enumeration.rs

1use crate::object_id::ObjectId;
2use crate::quoting::AttemptedKeywordUsage::TypeOrFunctionName;
3use crate::quoting::{quote_value_string, IdentifierQuoter, Quotable};
4use itertools::Itertools;
5use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Eq, PartialEq, Default, Clone, Serialize, Deserialize)]
8pub struct PostgresEnum {
9    pub name: String,
10    pub values: Vec<String>,
11    pub comment: Option<String>,
12    pub object_id: ObjectId,
13}
14
15impl PostgresEnum {
16    pub fn get_create_statement(&self, identifier_quoter: &IdentifierQuoter) -> String {
17        let mut sql = format!(
18            "create type {} as enum (",
19            self.name.quote(identifier_quoter, TypeOrFunctionName)
20        );
21        sql.push_str(&self.values.iter().map(|v| quote_value_string(v)).join(", "));
22        sql.push_str(");");
23
24        if let Some(comment) = &self.comment {
25            sql.push_str("\ncomment on type ");
26            sql.push_str(&self.name.quote(identifier_quoter, TypeOrFunctionName));
27            sql.push_str(" is ");
28            sql.push_str(&quote_value_string(comment));
29            sql.push(';');
30        }
31
32        sql
33    }
34}