logo
pub trait ActiveEnum: Sized + Iterable {
    type Value: Into<Value> + ValueType + Nullable + TryGetable;
    fn name() -> String;
fn to_value(&self) -> Self::Value;
fn try_from_value(v: &Self::Value) -> Result<Self, DbErr>;
fn db_type() -> ColumnDef; fn into_value(self) -> Self::Value { ... }
fn values() -> Vec<Self::Value>Notable traits for Vec<u8, A>impl<A> Write for Vec<u8, A> where
    A: Allocator
{ ... } }
Expand description

A Rust representation of enum defined in database.

Implementations

You can implement ActiveEnum manually by hand or use the derive macro DeriveActiveEnum.

Examples

Implementing it manually versus using the derive macro DeriveActiveEnum.

See DeriveActiveEnum for the full specification of macro attributes.

use sea_orm::entity::prelude::*;

// Using the derive macro
#[derive(Debug, PartialEq, EnumIter, DeriveActiveEnum)]
#[sea_orm(
    rs_type = "String",
    db_type = "String(Some(1))",
    enum_name = "category"
)]
pub enum DeriveCategory {
    #[sea_orm(string_value = "B")]
    Big,
    #[sea_orm(string_value = "S")]
    Small,
}

// Implementing it manually
#[derive(Debug, PartialEq, EnumIter)]
pub enum Category {
    Big,
    Small,
}

impl ActiveEnum for Category {
    // The macro attribute `rs_type` is being pasted here
    type Value = String;

    // Will be atomically generated by `DeriveActiveEnum`
    fn name() -> String {
        "category".to_owned()
    }

    // Will be atomically generated by `DeriveActiveEnum`
    fn to_value(&self) -> Self::Value {
        match self {
            Self::Big => "B",
            Self::Small => "S",
        }
        .to_owned()
    }

    // Will be atomically generated by `DeriveActiveEnum`
    fn try_from_value(v: &Self::Value) -> Result<Self, DbErr> {
        match v.as_ref() {
            "B" => Ok(Self::Big),
            "S" => Ok(Self::Small),
            _ => Err(DbErr::Type(format!(
                "unexpected value for Category enum: {}",
                v
            ))),
        }
    }

    fn db_type() -> ColumnDef {
        // The macro attribute `db_type` is being pasted here
        ColumnType::String(Some(1)).def()
    }
}

Using ActiveEnum on Model.

use sea_orm::entity::prelude::*;

// Define the `Category` active enum
#[derive(Debug, Clone, PartialEq, EnumIter, DeriveActiveEnum)]
#[sea_orm(rs_type = "String", db_type = "String(Some(1))")]
pub enum Category {
    #[sea_orm(string_value = "B")]
    Big,
    #[sea_orm(string_value = "S")]
    Small,
}

#[derive(Clone, Debug, PartialEq, DeriveEntityModel)]
#[sea_orm(table_name = "active_enum")]
pub struct Model {
    #[sea_orm(primary_key)]
    pub id: i32,
    // Represents a db column using `Category` active enum
    pub category: Category,
    pub category_opt: Option<Category>,
}

#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
pub enum Relation {}

impl ActiveModelBehavior for ActiveModel {}

Associated Types

Define the Rust type that each enum variant represents.

Required methods

Get the name of enum

Convert enum variant into the corresponding value.

Try to convert the corresponding value into enum variant.

Get the database column definition of this active enum.

Provided methods

Convert an owned enum variant into the corresponding value.

Get the name of all enum variants

Implementors