use-postgres 0.1.0

Feature-gated facade crate for RustUse PostgreSQL primitives
Documentation
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(())
}