sea_orm_codegen/entity/writer/
expanded.rs

1use super::*;
2
3impl EntityWriter {
4    #[allow(clippy::too_many_arguments)]
5    pub fn gen_expanded_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(with_serde);
19        imports.extend(Self::gen_import_active_enum(entity));
20        let mut code_blocks = vec![
21            imports,
22            Self::gen_entity_struct(),
23            Self::gen_impl_entity_name(entity, schema_name),
24            Self::gen_expanded_model_struct(
25                entity,
26                with_serde,
27                column_option,
28                serde_skip_deserializing_primary_key,
29                serde_skip_hidden_column,
30                model_extra_derives,
31                model_extra_attributes,
32            ),
33            Self::gen_column_enum(entity, column_extra_derives),
34            Self::gen_primary_key_enum(entity),
35            Self::gen_impl_primary_key(entity, column_option),
36            Self::gen_relation_enum(entity),
37            Self::gen_impl_column_trait(entity),
38            Self::gen_impl_relation_trait(entity),
39        ];
40        code_blocks.extend(Self::gen_impl_related(entity));
41        code_blocks.extend(Self::gen_impl_conjunct_related(entity));
42        if impl_active_model_behavior {
43            code_blocks.extend([Self::impl_active_model_behavior()]);
44        }
45        if seaography {
46            code_blocks.extend([Self::gen_related_entity(entity)]);
47        }
48        code_blocks
49    }
50
51    pub fn gen_expanded_model_struct(
52        entity: &Entity,
53        with_serde: &WithSerde,
54        column_option: &ColumnOption,
55        serde_skip_deserializing_primary_key: bool,
56        serde_skip_hidden_column: bool,
57        model_extra_derives: &TokenStream,
58        model_extra_attributes: &TokenStream,
59    ) -> TokenStream {
60        let column_names_snake_case = entity.get_column_names_snake_case();
61        let column_rs_types = entity.get_column_rs_types(column_option);
62        let if_eq_needed = entity.get_eq_needed();
63        let serde_attributes = entity.get_column_serde_attributes(
64            serde_skip_deserializing_primary_key,
65            serde_skip_hidden_column,
66        );
67        let extra_derive = with_serde.extra_derive();
68
69        quote! {
70            #[derive(Clone, Debug, PartialEq, DeriveModel, DeriveActiveModel #if_eq_needed #extra_derive #model_extra_derives)]
71            #model_extra_attributes
72            pub struct Model {
73                #(
74                    #serde_attributes
75                    pub #column_names_snake_case: #column_rs_types,
76                )*
77            }
78        }
79    }
80}