use sea_orm::entity::prelude::*;
use serde::{Deserialize, Serialize};
use std::fmt;
#[sea_orm::model]
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, DeriveEntityModel)]
#[sea_orm(table_name = "move_function_metadata")]
pub struct Model {
#[sea_orm(primary_key, auto_increment = false)]
pub function_id: i32,
pub visibility: MoveVisibility,
pub is_entry: bool,
#[sea_orm(column_type = "Text")]
pub generic_params: String,
#[sea_orm(belongs_to, from = "function_id", to = "id")]
pub function: HasOne<super::super::function::Entity>,
}
impl ActiveModelBehavior for ActiveModel {}
#[derive(
Debug, Clone, Copy, PartialEq, Eq, Hash, EnumIter, DeriveActiveEnum, Serialize, Deserialize,
)]
#[sea_orm(rs_type = "String", db_type = "String(StringLen::N(20))")]
pub enum MoveVisibility {
#[sea_orm(string_value = "Public")]
Public,
#[sea_orm(string_value = "PublicPackage")]
PublicPackage,
#[sea_orm(string_value = "PublicFriend")]
PublicFriend,
#[sea_orm(string_value = "Private")]
Private,
}
impl MoveVisibility {
pub fn as_str(&self) -> &'static str {
match self {
Self::Public => "Public",
Self::PublicPackage => "PublicPackage",
Self::PublicFriend => "PublicFriend",
Self::Private => "Private",
}
}
pub fn parse(s: &str) -> Option<Self> {
match s.trim().to_ascii_lowercase().as_str() {
"public" => Some(Self::Public),
"publicpackage" | "public_package" | "public(package)" => Some(Self::PublicPackage),
"publicfriend" | "public_friend" | "public(friend)" => Some(Self::PublicFriend),
"private" => Some(Self::Private),
_ => None,
}
}
}
impl fmt::Display for MoveVisibility {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str(self.as_str())
}
}