sea_orm_codegen/entity/writer/
expanded.rs1use 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}