use use_postgres::{column, constraint, enumeration, extension, index, schema, table, ty};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let users = table::PgTableRef::qualified(
schema::PgSchemaName::public(),
table::PgTableName::new("users")?,
);
let id = column::PgColumn::with_built_in_type(
column::PgColumnName::new("id")?,
ty::PgBuiltInType::BigInt,
)
.with_nullability(column::PgNullability::NotNull)
.with_identity(column::PgIdentityKind::Always);
let email = column::PgColumn::with_built_in_type(
column::PgColumnName::new("email")?,
ty::PgBuiltInType::Text,
)
.with_nullability(column::PgNullability::NotNull);
let primary_key = constraint::PgConstraint::new(constraint::PgConstraintKind::PrimaryKey)
.with_name(constraint::PgConstraintName::new("users_pkey")?)
.with_columns(vec![column::PgColumnName::new("id")?]);
let email_index = index::PgIndex::new(index::PgIndexName::new("users_email_idx")?)
.with_table(users.clone())
.with_method(index::PgIndexMethod::Btree)
.with_columns(vec![index::PgIndexColumn::new("email")?])
.with_flags(index::PgIndexFlags::default().unique(true));
let status = enumeration::PgEnumType::new(enumeration::PgEnumName::new("user_status")?)
.with_schema(schema::PgSchemaName::public())
.with_variants(vec![
enumeration::PgEnumVariant::new("active")?,
enumeration::PgEnumVariant::new("disabled")?,
])?;
let pgcrypto = extension::PgExtension::new(extension::PgExtensionName::pgcrypto())
.with_version(extension::PgExtensionVersion::new("1.3")?);
assert_eq!(users.to_string(), "public.users");
assert_eq!(id.identity(), Some(column::PgIdentityKind::Always));
assert_eq!(email.nullability(), column::PgNullability::NotNull);
assert_eq!(primary_key.to_string(), "CONSTRAINT users_pkey PRIMARY KEY");
assert!(email_index.flags().is_unique());
assert_eq!(status.variants().len(), 2);
assert_eq!(pgcrypto.name().as_str(), "pgcrypto");
Ok(())
}