sea_orm_codegen/entity/writer/
frontend.rs

1use super::*;
2
3impl EntityWriter {
4    #[allow(clippy::too_many_arguments)]
5    pub fn gen_frontend_code_blocks(
6        entity: &Entity,
7        with_serde: &WithSerde,
8        column_option: &ColumnOption,
9        schema_name: &Option<String>,
10        serde_skip_deserializing_primary_key: bool,
11        serde_skip_hidden_column: bool,
12        model_extra_derives: &TokenStream,
13        model_extra_attributes: &TokenStream,
14        _column_extra_derives: &TokenStream,
15        _seaography: bool,
16        _impl_active_model_behavior: bool,
17    ) -> Vec<TokenStream> {
18        let mut imports = Self::gen_import_serde(with_serde);
19        imports.extend(Self::gen_import_active_enum(entity));
20        let code_blocks = vec![
21            imports,
22            Self::gen_frontend_model_struct(
23                entity,
24                with_serde,
25                column_option,
26                schema_name,
27                serde_skip_deserializing_primary_key,
28                serde_skip_hidden_column,
29                model_extra_derives,
30                model_extra_attributes,
31            ),
32        ];
33        code_blocks
34    }
35
36    #[allow(clippy::too_many_arguments)]
37    pub fn gen_frontend_model_struct(
38        entity: &Entity,
39        with_serde: &WithSerde,
40        column_option: &ColumnOption,
41        _schema_name: &Option<String>,
42        serde_skip_deserializing_primary_key: bool,
43        serde_skip_hidden_column: bool,
44        model_extra_derives: &TokenStream,
45        model_extra_attributes: &TokenStream,
46    ) -> TokenStream {
47        let column_names_snake_case = entity.get_column_names_snake_case();
48        let column_rs_types = entity.get_column_rs_types(column_option);
49        let if_eq_needed = entity.get_eq_needed();
50        let primary_keys: Vec<String> = entity
51            .primary_keys
52            .iter()
53            .map(|pk| pk.name.clone())
54            .collect();
55        let attrs: Vec<TokenStream> = entity
56            .columns
57            .iter()
58            .map(|col| {
59                let is_primary_key = primary_keys.contains(&col.name);
60                col.get_serde_attribute(
61                    is_primary_key,
62                    serde_skip_deserializing_primary_key,
63                    serde_skip_hidden_column,
64                )
65            })
66            .collect();
67        let extra_derive = with_serde.extra_derive();
68
69        quote! {
70            #[derive(Clone, Debug, PartialEq #if_eq_needed #extra_derive #model_extra_derives)]
71            #model_extra_attributes
72            pub struct Model {
73                #(
74                    #attrs
75                    pub #column_names_snake_case: #column_rs_types,
76                )*
77            }
78        }
79    }
80}