Skip to main content

thunkmetrc_wrapper/
lib.rs

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