use std::sync::Arc;
use std::time::Duration;
use crate::line_channel_access_token::apis::{
configuration::Configuration as ChannelAccessTokenApiConfiguration, ChannelAccessTokenApiClient,
};
use crate::line_insight::apis::{
configuration::Configuration as InsightConfiguration, InsightApiClient,
};
use crate::line_liff::apis::{configuration::Configuration as LiffConfiguration, LiffApiClient};
use crate::line_manage_audience::apis::{
configuration::Configuration as ManageAudienceConfiguration, ManageAudienceApiClient,
ManageAudienceBlobApiClient,
};
use crate::line_messaging_api::apis::{
configuration::Configuration as MessagingApiConfiguration, MessagingApiApiClient,
MessagingApiBlobApiClient,
};
use crate::line_module::apis::{
configuration::Configuration as LineModuleConfiguration, LineModuleApiClient,
};
use crate::line_module_attach::apis::{
configuration::Configuration as LineModuleAttachConfiguration, LineModuleAttachApiClient,
};
use crate::line_shop::apis::{configuration::Configuration as ShopConfiguration, ShopApiClient};
use crate::line_webhook::apis::{
configuration::Configuration as WebhookConfiguration, DummyApiClient as WebhookDummyApiClient,
};
use hyper_rustls::HttpsConnector;
use hyper_rustls::HttpsConnectorBuilder;
use hyper_util::client::legacy::connect::HttpConnector;
use hyper_util::client::legacy::Client;
use hyper_util::rt::TokioExecutor;
type HttpsClient = HttpsConnector<HttpConnector>;
#[derive(Clone)]
pub struct LINE {
pub channel_access_token_api_client: ChannelAccessTokenApiClient<HttpsClient>,
pub insight_api_client: InsightApiClient<HttpsClient>,
pub liff_api_client: LiffApiClient<HttpsClient>,
pub manage_audience_api_client: ManageAudienceApiClient<HttpsClient>,
pub manage_audience_blob_api_client: ManageAudienceBlobApiClient<HttpsClient>,
pub messaging_api_client: MessagingApiApiClient<HttpsClient>,
pub messaging_api_blob_client: MessagingApiBlobApiClient<HttpsClient>,
pub module_api_client: LineModuleApiClient<HttpsClient>,
pub module_attach_api_client: LineModuleAttachApiClient<HttpsClient>,
pub shop_api_client: ShopApiClient<HttpsClient>,
pub webhook_dummy_api_client: WebhookDummyApiClient<HttpsClient>,
}
impl LINE {
pub fn new(token: String) -> LINE {
LINEBuilder {
token,
timeout: None,
}
.build()
}
pub fn builder(token: String) -> LINEBuilder {
LINEBuilder {
token,
timeout: None,
}
}
fn create_hyper_client() -> Client<HttpsClient, String> {
let https = HttpsConnectorBuilder::new()
.with_native_roots()
.expect("no native root certs found")
.https_only()
.enable_http1()
.build();
Client::builder(TokioExecutor::new()).build(https)
}
}
pub struct LINEBuilder {
token: String,
timeout: Option<Duration>,
}
impl LINEBuilder {
pub fn timeout(mut self, duration: Duration) -> Self {
self.timeout = Some(duration);
self
}
pub fn build(self) -> LINE {
let client = LINE::create_hyper_client();
let timeout = self.timeout;
let token = self.token;
let mut channel_access_token_api_conf =
ChannelAccessTokenApiConfiguration::with_client(client.clone());
channel_access_token_api_conf.oauth_access_token = Some(token.to_owned());
channel_access_token_api_conf.timeout = timeout;
let channel_access_token_api_client =
ChannelAccessTokenApiClient::new(Arc::new(channel_access_token_api_conf));
let mut insight_conf = InsightConfiguration::with_client(client.clone());
insight_conf.oauth_access_token = Some(token.to_owned());
insight_conf.timeout = timeout;
let insight_api_client = InsightApiClient::new(Arc::new(insight_conf));
let mut liff_conf = LiffConfiguration::with_client(client.clone());
liff_conf.oauth_access_token = Some(token.to_owned());
liff_conf.timeout = timeout;
let liff_api_client = LiffApiClient::new(Arc::new(liff_conf));
let mut manage_audience_conf = ManageAudienceConfiguration::with_client(client.clone());
manage_audience_conf.oauth_access_token = Some(token.to_owned());
manage_audience_conf.timeout = timeout;
let manage_audience_api_client =
ManageAudienceApiClient::new(Arc::new(manage_audience_conf));
let mut manage_audience_blob_conf =
ManageAudienceConfiguration::with_client(client.clone());
manage_audience_blob_conf.oauth_access_token = Some(token.to_owned());
manage_audience_blob_conf.timeout = timeout;
let manage_audience_blob_api_client =
ManageAudienceBlobApiClient::new(Arc::new(manage_audience_blob_conf));
let mut messaging_api_conf = MessagingApiConfiguration::with_client(client.clone());
messaging_api_conf.oauth_access_token = Some(token.to_owned());
messaging_api_conf.timeout = timeout;
let messaging_api_client = MessagingApiApiClient::new(Arc::new(messaging_api_conf));
let mut messaging_api_blob_conf = MessagingApiConfiguration::with_client(client.clone());
messaging_api_blob_conf.oauth_access_token = Some(token.to_owned());
messaging_api_blob_conf.timeout = timeout;
let messaging_api_blob_client =
MessagingApiBlobApiClient::new(Arc::new(messaging_api_blob_conf));
let mut module_conf = LineModuleConfiguration::with_client(client.clone());
module_conf.oauth_access_token = Some(token.to_owned());
module_conf.timeout = timeout;
let module_api_client = LineModuleApiClient::new(Arc::new(module_conf));
let mut module_attach_conf = LineModuleAttachConfiguration::with_client(client.clone());
module_attach_conf.oauth_access_token = Some(token.to_owned());
module_attach_conf.timeout = timeout;
let module_attach_api_client = LineModuleAttachApiClient::new(Arc::new(module_attach_conf));
let mut shop_conf = ShopConfiguration::with_client(client.clone());
shop_conf.oauth_access_token = Some(token.to_owned());
shop_conf.timeout = timeout;
let shop_api_client = ShopApiClient::new(Arc::new(shop_conf));
let mut webhook_conf = WebhookConfiguration::with_client(client.clone());
webhook_conf.oauth_access_token = Some(token.to_owned());
webhook_conf.timeout = timeout;
let webhook_dummy_api_client = WebhookDummyApiClient::new(Arc::new(webhook_conf));
LINE {
channel_access_token_api_client,
insight_api_client,
liff_api_client,
manage_audience_api_client,
manage_audience_blob_api_client,
messaging_api_client,
messaging_api_blob_client,
module_api_client,
module_attach_api_client,
shop_api_client,
webhook_dummy_api_client,
}
}
}