Skip to main content

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