actix-admin/actix_admin_macros/src/model_fields.rs

49 lines
1.3 KiB
Rust
Raw Normal View History

use syn::{
Visibility, Type
};
2022-07-27 17:35:45 +02:00
use quote::ToTokens;
pub struct ModelField {
pub visibility: Visibility,
pub ident: proc_macro2::Ident,
pub ty: Type,
// struct field is option<>
pub inner_type: Option<Type>,
pub primary_key: bool,
2022-07-21 19:01:05 +02:00
pub html_input_type: String,
2022-07-31 16:33:02 +02:00
pub select_list: String,
2022-08-20 23:31:45 +02:00
pub searchable: bool,
pub textarea: bool
}
impl ModelField {
pub fn is_option(&self) -> bool {
self.inner_type.is_some()
}
2022-07-27 17:35:45 +02:00
pub fn is_string(&self) -> bool {
match &self.ty {
Type::Path(type_path) if type_path.clone().into_token_stream().to_string() == "String" => {
true
}
_ => false
}
}
pub fn get_type_path_string(&self) -> String {
let type_path_string: String;
if self.is_option() {
match &self.inner_type.clone().unwrap() {
Type::Path(type_path) => type_path_string = type_path.clone().into_token_stream().to_string(),
_ => panic!("not a type path")
}
} else {
match &self.ty {
Type::Path(type_path) => type_path_string = type_path.clone().into_token_stream().to_string(),
_ => panic!("not a type path")
}
}
type_path_string
}
}