backbone_catalog/handlers/
mod.rs1use std::sync::Arc;
10
11use crate::application::service::AttributeService;
13use crate::application::service::AttributeValueService;
14use crate::application::service::BrandService;
15use crate::application::service::ItemService;
16use crate::application::service::ItemGroupService;
17use crate::application::service::ItemVariantService;
18use crate::application::service::UomService;
19use crate::application::service::UomConversionService;
20
21#[derive(Clone)]
38pub struct AppState {
39 pub attribute_service: Arc<AttributeService>,
41 pub attribute_value_service: Arc<AttributeValueService>,
43 pub brand_service: Arc<BrandService>,
45 pub item_service: Arc<ItemService>,
47 pub item_group_service: Arc<ItemGroupService>,
49 pub item_variant_service: Arc<ItemVariantService>,
51 pub uom_service: Arc<UomService>,
53 pub uom_conversion_service: Arc<UomConversionService>,
55}
56
57impl AppState {
58 pub fn new(
60 attribute_service: Arc<AttributeService>,
61 attribute_value_service: Arc<AttributeValueService>,
62 brand_service: Arc<BrandService>,
63 item_service: Arc<ItemService>,
64 item_group_service: Arc<ItemGroupService>,
65 item_variant_service: Arc<ItemVariantService>,
66 uom_service: Arc<UomService>,
67 uom_conversion_service: Arc<UomConversionService>
68 ) -> Self {
69 Self {
70 attribute_service,
71 attribute_value_service,
72 brand_service,
73 item_service,
74 item_group_service,
75 item_variant_service,
76 uom_service,
77 uom_conversion_service,
78 }
79 }
80
81 pub fn from_module(module: &crate::CatalogModule) -> Self {
83 Self {
84 attribute_service: module.attribute_service.clone(),
85 attribute_value_service: module.attribute_value_service.clone(),
86 brand_service: module.brand_service.clone(),
87 item_service: module.item_service.clone(),
88 item_group_service: module.item_group_service.clone(),
89 item_variant_service: module.item_variant_service.clone(),
90 uom_service: module.uom_service.clone(),
91 uom_conversion_service: module.uom_conversion_service.clone(),
92 }
93 }
94}
95
96#[derive(Default)]
100pub struct AppStateBuilder {
101 attribute_service: Option<Arc<AttributeService>>,
102 attribute_value_service: Option<Arc<AttributeValueService>>,
103 brand_service: Option<Arc<BrandService>>,
104 item_service: Option<Arc<ItemService>>,
105 item_group_service: Option<Arc<ItemGroupService>>,
106 item_variant_service: Option<Arc<ItemVariantService>>,
107 uom_service: Option<Arc<UomService>>,
108 uom_conversion_service: Option<Arc<UomConversionService>>,
109}
110
111impl AppStateBuilder {
112 pub fn new() -> Self {
114 Self::default()
115 }
116
117 pub fn with_attribute_service(mut self, service: Arc<AttributeService>) -> Self {
119 self.attribute_service = Some(service);
120 self
121 }
122
123 pub fn with_attribute_value_service(mut self, service: Arc<AttributeValueService>) -> Self {
125 self.attribute_value_service = Some(service);
126 self
127 }
128
129 pub fn with_brand_service(mut self, service: Arc<BrandService>) -> Self {
131 self.brand_service = Some(service);
132 self
133 }
134
135 pub fn with_item_service(mut self, service: Arc<ItemService>) -> Self {
137 self.item_service = Some(service);
138 self
139 }
140
141 pub fn with_item_group_service(mut self, service: Arc<ItemGroupService>) -> Self {
143 self.item_group_service = Some(service);
144 self
145 }
146
147 pub fn with_item_variant_service(mut self, service: Arc<ItemVariantService>) -> Self {
149 self.item_variant_service = Some(service);
150 self
151 }
152
153 pub fn with_uom_service(mut self, service: Arc<UomService>) -> Self {
155 self.uom_service = Some(service);
156 self
157 }
158
159 pub fn with_uom_conversion_service(mut self, service: Arc<UomConversionService>) -> Self {
161 self.uom_conversion_service = Some(service);
162 self
163 }
164
165 pub fn build(self) -> AppState {
171 AppState {
172 attribute_service: self.attribute_service.expect("attribute_service is required"),
173 attribute_value_service: self.attribute_value_service.expect("attribute_value_service is required"),
174 brand_service: self.brand_service.expect("brand_service is required"),
175 item_service: self.item_service.expect("item_service is required"),
176 item_group_service: self.item_group_service.expect("item_group_service is required"),
177 item_variant_service: self.item_variant_service.expect("item_variant_service is required"),
178 uom_service: self.uom_service.expect("uom_service is required"),
179 uom_conversion_service: self.uom_conversion_service.expect("uom_conversion_service is required"),
180 }
181 }
182}