1use crate::{
2 apis::{
3 associations::AssociationsApi, blogs::BlogsApi, businesses::BusinessesApi,
4 calendars::CalendarsApi, campaigns::CampaignsApi, companies::CompaniesApi,
5 contacts::ContactsApi, conversations::ConversationsApi, courses::CoursesApi,
6 custom_fields::CustomFieldsApi, custom_menus::CustomMenusApi, forms::FormsApi,
7 funnels::FunnelsApi, invoices::InvoicesApi, links::LinksApi, locations::LocationsApi,
8 medias::MediasApi, objects::ObjectsApi, opportunities::OpportunitiesApi,
9 payments::PaymentsApi, pipelines::PipelinesApi, products::ProductsApi,
10 snapshots::SnapshotsApi, social_planner::SocialPlannerApi, surveys::SurveysApi,
11 tags::TagsApi, users::UsersApi, webhooks::WebhooksApi, workflows::WorkflowsApi,
12 },
13 auth::OAuthClient,
14 config::HighLevelConfig,
15 http::HttpClient,
16};
17use std::sync::Arc;
18
19pub struct HighLevel {
33 pub(crate) http: Arc<HttpClient>,
34 pub(crate) config: Arc<HighLevelConfig>,
35}
36
37impl HighLevel {
38 pub fn new(config: HighLevelConfig) -> Self {
39 let http = Arc::new(HttpClient::new(&config));
40 Self {
41 http,
42 config: Arc::new(config),
43 }
44 }
45
46 pub async fn set_access_token(&self, token: impl Into<String>) {
48 self.http.set_token(token.into()).await;
49 }
50
51 pub async fn access_token(&self) -> Option<String> {
53 self.http.get_token().await
54 }
55
56 pub fn oauth(&self) -> OAuthClient {
57 OAuthClient::new(self.config.clone(), reqwest::Client::new())
58 }
59
60 pub fn associations(&self) -> AssociationsApi {
63 AssociationsApi::new(self.http.clone())
64 }
65 pub fn blogs(&self) -> BlogsApi {
66 BlogsApi::new(self.http.clone())
67 }
68 pub fn businesses(&self) -> BusinessesApi {
69 BusinessesApi::new(self.http.clone())
70 }
71 pub fn calendars(&self) -> CalendarsApi {
72 CalendarsApi::new(self.http.clone())
73 }
74 pub fn campaigns(&self) -> CampaignsApi {
75 CampaignsApi::new(self.http.clone())
76 }
77 pub fn companies(&self) -> CompaniesApi {
78 CompaniesApi::new(self.http.clone())
79 }
80 pub fn contacts(&self) -> ContactsApi {
81 ContactsApi::new(self.http.clone())
82 }
83 pub fn conversations(&self) -> ConversationsApi {
84 ConversationsApi::new(self.http.clone())
85 }
86 pub fn courses(&self) -> CoursesApi {
87 CoursesApi::new(self.http.clone())
88 }
89 pub fn custom_fields(&self) -> CustomFieldsApi {
90 CustomFieldsApi::new(self.http.clone())
91 }
92 pub fn custom_menus(&self) -> CustomMenusApi {
93 CustomMenusApi::new(self.http.clone())
94 }
95 pub fn forms(&self) -> FormsApi {
96 FormsApi::new(self.http.clone())
97 }
98 pub fn funnels(&self) -> FunnelsApi {
99 FunnelsApi::new(self.http.clone())
100 }
101 pub fn invoices(&self) -> InvoicesApi {
102 InvoicesApi::new(self.http.clone())
103 }
104 pub fn links(&self) -> LinksApi {
105 LinksApi::new(self.http.clone())
106 }
107 pub fn locations(&self) -> LocationsApi {
108 LocationsApi::new(self.http.clone())
109 }
110 pub fn medias(&self) -> MediasApi {
111 MediasApi::new(self.http.clone())
112 }
113 pub fn objects(&self) -> ObjectsApi {
114 ObjectsApi::new(self.http.clone())
115 }
116 pub fn opportunities(&self) -> OpportunitiesApi {
117 OpportunitiesApi::new(self.http.clone())
118 }
119 pub fn payments(&self) -> PaymentsApi {
120 PaymentsApi::new(self.http.clone())
121 }
122 pub fn pipelines(&self) -> PipelinesApi {
123 PipelinesApi::new(self.http.clone())
124 }
125 pub fn products(&self) -> ProductsApi {
126 ProductsApi::new(self.http.clone())
127 }
128 pub fn snapshots(&self) -> SnapshotsApi {
129 SnapshotsApi::new(self.http.clone())
130 }
131 pub fn social_planner(&self) -> SocialPlannerApi {
132 SocialPlannerApi::new(self.http.clone())
133 }
134 pub fn surveys(&self) -> SurveysApi {
135 SurveysApi::new(self.http.clone())
136 }
137 pub fn tags(&self) -> TagsApi {
138 TagsApi::new(self.http.clone())
139 }
140 pub fn users(&self) -> UsersApi {
141 UsersApi::new(self.http.clone())
142 }
143 pub fn webhooks(&self) -> WebhooksApi {
144 WebhooksApi::new(self.http.clone())
145 }
146 pub fn workflows(&self) -> WorkflowsApi {
147 WorkflowsApi::new(self.http.clone())
148 }
149}