1pub use thunkmetrc_client::MetrcClient;
2use std::sync::Arc;
3mod ratelimiter;
4pub use ratelimiter::RateLimiterConfig;
5pub use ratelimiter::MetrcRateLimiter;
6
7pub mod models;
8pub mod utils;
9pub mod services;
10use services::additives_templates_service::AdditivesTemplatesService;
11use services::caregivers_status_service::CaregiversStatusService;
12use services::employees_service::EmployeesService;
13use services::facilities_service::FacilitiesService;
14use services::harvests_service::HarvestsService;
15use services::items_service::ItemsService;
16use services::lab_tests_service::LabTestsService;
17use services::locations_service::LocationsService;
18use services::packages_service::PackagesService;
19use services::patient_check_ins_service::PatientCheckInsService;
20use services::patients_service::PatientsService;
21use services::patients_status_service::PatientsStatusService;
22use services::plant_batches_service::PlantBatchesService;
23use services::plants_service::PlantsService;
24use services::processing_job_service::ProcessingJobService;
25use services::retail_id_service::RetailIdService;
26use services::sales_service::SalesService;
27use services::sandbox_service::SandboxService;
28use services::strains_service::StrainsService;
29use services::sublocations_service::SublocationsService;
30use services::tags_service::TagsService;
31use services::transfers_service::TransfersService;
32use services::transporters_service::TransportersService;
33use services::units_of_measure_service::UnitsOfMeasureService;
34use services::waste_methods_service::WasteMethodsService;
35use services::webhooks_service::WebhooksService;
36
37pub struct MetrcWrapper {
38 pub additives_templates: AdditivesTemplatesService,
39 pub caregivers_status: CaregiversStatusService,
40 pub employees: EmployeesService,
41 pub facilities: FacilitiesService,
42 pub harvests: HarvestsService,
43 pub items: ItemsService,
44 pub lab_tests: LabTestsService,
45 pub locations: LocationsService,
46 pub packages: PackagesService,
47 pub patient_check_ins: PatientCheckInsService,
48 pub patients: PatientsService,
49 pub patients_status: PatientsStatusService,
50 pub plant_batches: PlantBatchesService,
51 pub plants: PlantsService,
52 pub processing_job: ProcessingJobService,
53 pub retail_id: RetailIdService,
54 pub sales: SalesService,
55 pub sandbox: SandboxService,
56 pub strains: StrainsService,
57 pub sublocations: SublocationsService,
58 pub tags: TagsService,
59 pub transfers: TransfersService,
60 pub transporters: TransportersService,
61 pub units_of_measure: UnitsOfMeasureService,
62 pub waste_methods: WasteMethodsService,
63 pub webhooks: WebhooksService,
64}
65
66impl MetrcWrapper {
67 pub fn new(client: MetrcClient) -> Self {
68 let rate_limiter = Arc::new(MetrcRateLimiter::new(Some(RateLimiterConfig::default())));
69 MetrcWrapper {
70 additives_templates: AdditivesTemplatesService::new(client.clone(), rate_limiter.clone()),
71 caregivers_status: CaregiversStatusService::new(client.clone(), rate_limiter.clone()),
72 employees: EmployeesService::new(client.clone(), rate_limiter.clone()),
73 facilities: FacilitiesService::new(client.clone(), rate_limiter.clone()),
74 harvests: HarvestsService::new(client.clone(), rate_limiter.clone()),
75 items: ItemsService::new(client.clone(), rate_limiter.clone()),
76 lab_tests: LabTestsService::new(client.clone(), rate_limiter.clone()),
77 locations: LocationsService::new(client.clone(), rate_limiter.clone()),
78 packages: PackagesService::new(client.clone(), rate_limiter.clone()),
79 patient_check_ins: PatientCheckInsService::new(client.clone(), rate_limiter.clone()),
80 patients: PatientsService::new(client.clone(), rate_limiter.clone()),
81 patients_status: PatientsStatusService::new(client.clone(), rate_limiter.clone()),
82 plant_batches: PlantBatchesService::new(client.clone(), rate_limiter.clone()),
83 plants: PlantsService::new(client.clone(), rate_limiter.clone()),
84 processing_job: ProcessingJobService::new(client.clone(), rate_limiter.clone()),
85 retail_id: RetailIdService::new(client.clone(), rate_limiter.clone()),
86 sales: SalesService::new(client.clone(), rate_limiter.clone()),
87 sandbox: SandboxService::new(client.clone(), rate_limiter.clone()),
88 strains: StrainsService::new(client.clone(), rate_limiter.clone()),
89 sublocations: SublocationsService::new(client.clone(), rate_limiter.clone()),
90 tags: TagsService::new(client.clone(), rate_limiter.clone()),
91 transfers: TransfersService::new(client.clone(), rate_limiter.clone()),
92 transporters: TransportersService::new(client.clone(), rate_limiter.clone()),
93 units_of_measure: UnitsOfMeasureService::new(client.clone(), rate_limiter.clone()),
94 waste_methods: WasteMethodsService::new(client.clone(), rate_limiter.clone()),
95 webhooks: WebhooksService::new(client.clone(), rate_limiter.clone()),
96 }
97 }
98
99 pub fn new_with_config(client: MetrcClient, config: RateLimiterConfig) -> Self {
100 let rate_limiter = Arc::new(MetrcRateLimiter::new(Some(config)));
101 MetrcWrapper {
102 additives_templates: AdditivesTemplatesService::new(client.clone(), rate_limiter.clone()),
103 caregivers_status: CaregiversStatusService::new(client.clone(), rate_limiter.clone()),
104 employees: EmployeesService::new(client.clone(), rate_limiter.clone()),
105 facilities: FacilitiesService::new(client.clone(), rate_limiter.clone()),
106 harvests: HarvestsService::new(client.clone(), rate_limiter.clone()),
107 items: ItemsService::new(client.clone(), rate_limiter.clone()),
108 lab_tests: LabTestsService::new(client.clone(), rate_limiter.clone()),
109 locations: LocationsService::new(client.clone(), rate_limiter.clone()),
110 packages: PackagesService::new(client.clone(), rate_limiter.clone()),
111 patient_check_ins: PatientCheckInsService::new(client.clone(), rate_limiter.clone()),
112 patients: PatientsService::new(client.clone(), rate_limiter.clone()),
113 patients_status: PatientsStatusService::new(client.clone(), rate_limiter.clone()),
114 plant_batches: PlantBatchesService::new(client.clone(), rate_limiter.clone()),
115 plants: PlantsService::new(client.clone(), rate_limiter.clone()),
116 processing_job: ProcessingJobService::new(client.clone(), rate_limiter.clone()),
117 retail_id: RetailIdService::new(client.clone(), rate_limiter.clone()),
118 sales: SalesService::new(client.clone(), rate_limiter.clone()),
119 sandbox: SandboxService::new(client.clone(), rate_limiter.clone()),
120 strains: StrainsService::new(client.clone(), rate_limiter.clone()),
121 sublocations: SublocationsService::new(client.clone(), rate_limiter.clone()),
122 tags: TagsService::new(client.clone(), rate_limiter.clone()),
123 transfers: TransfersService::new(client.clone(), rate_limiter.clone()),
124 transporters: TransportersService::new(client.clone(), rate_limiter.clone()),
125 units_of_measure: UnitsOfMeasureService::new(client.clone(), rate_limiter.clone()),
126 waste_methods: WasteMethodsService::new(client.clone(), rate_limiter.clone()),
127 webhooks: WebhooksService::new(client.clone(), rate_limiter.clone()),
128 }
129 }
130 pub fn new_with_limiter(client: MetrcClient, rate_limiter: Arc<MetrcRateLimiter>) -> Self {
131 MetrcWrapper {
132 additives_templates: AdditivesTemplatesService::new(client.clone(), rate_limiter.clone()),
133 caregivers_status: CaregiversStatusService::new(client.clone(), rate_limiter.clone()),
134 employees: EmployeesService::new(client.clone(), rate_limiter.clone()),
135 facilities: FacilitiesService::new(client.clone(), rate_limiter.clone()),
136 harvests: HarvestsService::new(client.clone(), rate_limiter.clone()),
137 items: ItemsService::new(client.clone(), rate_limiter.clone()),
138 lab_tests: LabTestsService::new(client.clone(), rate_limiter.clone()),
139 locations: LocationsService::new(client.clone(), rate_limiter.clone()),
140 packages: PackagesService::new(client.clone(), rate_limiter.clone()),
141 patient_check_ins: PatientCheckInsService::new(client.clone(), rate_limiter.clone()),
142 patients: PatientsService::new(client.clone(), rate_limiter.clone()),
143 patients_status: PatientsStatusService::new(client.clone(), rate_limiter.clone()),
144 plant_batches: PlantBatchesService::new(client.clone(), rate_limiter.clone()),
145 plants: PlantsService::new(client.clone(), rate_limiter.clone()),
146 processing_job: ProcessingJobService::new(client.clone(), rate_limiter.clone()),
147 retail_id: RetailIdService::new(client.clone(), rate_limiter.clone()),
148 sales: SalesService::new(client.clone(), rate_limiter.clone()),
149 sandbox: SandboxService::new(client.clone(), rate_limiter.clone()),
150 strains: StrainsService::new(client.clone(), rate_limiter.clone()),
151 sublocations: SublocationsService::new(client.clone(), rate_limiter.clone()),
152 tags: TagsService::new(client.clone(), rate_limiter.clone()),
153 transfers: TransfersService::new(client.clone(), rate_limiter.clone()),
154 transporters: TransportersService::new(client.clone(), rate_limiter.clone()),
155 units_of_measure: UnitsOfMeasureService::new(client.clone(), rate_limiter.clone()),
156 waste_methods: WasteMethodsService::new(client.clone(), rate_limiter.clone()),
157 webhooks: WebhooksService::new(client.clone(), rate_limiter.clone()),
158 }
159 }
160}
161