use std::sync::Arc;
use crate::{
auth::OAuthClient,
config::HighLevelConfig,
http::HttpClient,
storage::{memory::MemoryStorage, SessionStorage},
apis::{
blogs::BlogsApi,
businesses::BusinessesApi,
calendars::CalendarsApi,
campaigns::CampaignsApi,
companies::CompaniesApi,
contacts::ContactsApi,
conversations::ConversationsApi,
courses::CoursesApi,
custom_fields::CustomFieldsApi,
custom_menus::CustomMenusApi,
forms::FormsApi,
funnels::FunnelsApi,
invoices::InvoicesApi,
links::LinksApi,
locations::LocationsApi,
medias::MediasApi,
opportunities::OpportunitiesApi,
payments::PaymentsApi,
pipelines::PipelinesApi,
products::ProductsApi,
snapshots::SnapshotsApi,
social_planner::SocialPlannerApi,
surveys::SurveysApi,
tags::TagsApi,
users::UsersApi,
webhooks::WebhooksApi,
workflows::WorkflowsApi,
},
};
pub struct HighLevel {
pub(crate) http: Arc<HttpClient>,
pub(crate) config: Arc<HighLevelConfig>,
pub(crate) storage: Arc<dyn SessionStorage>,
}
impl HighLevel {
pub fn new(config: HighLevelConfig) -> Self {
Self::with_storage(config, Arc::new(MemoryStorage::new()))
}
pub fn with_storage(config: HighLevelConfig, storage: Arc<dyn SessionStorage>) -> Self {
let http = Arc::new(HttpClient::new(&config));
Self {
http,
config: Arc::new(config),
storage,
}
}
pub async fn set_access_token(&self, token: impl Into<String>) {
self.http.set_token(token.into()).await;
}
pub async fn access_token(&self) -> Option<String> {
self.http.get_token().await
}
pub fn oauth(&self) -> OAuthClient {
OAuthClient::new(self.config.clone(), reqwest::Client::new())
}
pub fn blogs(&self) -> BlogsApi { BlogsApi::new(self.http.clone()) }
pub fn businesses(&self) -> BusinessesApi { BusinessesApi::new(self.http.clone()) }
pub fn calendars(&self) -> CalendarsApi { CalendarsApi::new(self.http.clone()) }
pub fn campaigns(&self) -> CampaignsApi { CampaignsApi::new(self.http.clone()) }
pub fn companies(&self) -> CompaniesApi { CompaniesApi::new(self.http.clone()) }
pub fn contacts(&self) -> ContactsApi { ContactsApi::new(self.http.clone()) }
pub fn conversations(&self) -> ConversationsApi { ConversationsApi::new(self.http.clone()) }
pub fn courses(&self) -> CoursesApi { CoursesApi::new(self.http.clone()) }
pub fn custom_fields(&self) -> CustomFieldsApi { CustomFieldsApi::new(self.http.clone()) }
pub fn custom_menus(&self) -> CustomMenusApi { CustomMenusApi::new(self.http.clone()) }
pub fn forms(&self) -> FormsApi { FormsApi::new(self.http.clone()) }
pub fn funnels(&self) -> FunnelsApi { FunnelsApi::new(self.http.clone()) }
pub fn invoices(&self) -> InvoicesApi { InvoicesApi::new(self.http.clone()) }
pub fn links(&self) -> LinksApi { LinksApi::new(self.http.clone()) }
pub fn locations(&self) -> LocationsApi { LocationsApi::new(self.http.clone()) }
pub fn medias(&self) -> MediasApi { MediasApi::new(self.http.clone()) }
pub fn opportunities(&self) -> OpportunitiesApi { OpportunitiesApi::new(self.http.clone()) }
pub fn payments(&self) -> PaymentsApi { PaymentsApi::new(self.http.clone()) }
pub fn pipelines(&self) -> PipelinesApi { PipelinesApi::new(self.http.clone()) }
pub fn products(&self) -> ProductsApi { ProductsApi::new(self.http.clone()) }
pub fn snapshots(&self) -> SnapshotsApi { SnapshotsApi::new(self.http.clone()) }
pub fn social_planner(&self) -> SocialPlannerApi { SocialPlannerApi::new(self.http.clone()) }
pub fn surveys(&self) -> SurveysApi { SurveysApi::new(self.http.clone()) }
pub fn tags(&self) -> TagsApi { TagsApi::new(self.http.clone()) }
pub fn users(&self) -> UsersApi { UsersApi::new(self.http.clone()) }
pub fn webhooks(&self) -> WebhooksApi { WebhooksApi::new(self.http.clone()) }
pub fn workflows(&self) -> WorkflowsApi { WorkflowsApi::new(self.http.clone()) }
}