elefant_tools/models/
enumeration.rs1use 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("e_value_string(comment));
29 sql.push(';');
30 }
31
32 sql
33 }
34}