line_bot_sdk_rust/client/
mod.rs1use std::sync::Arc;
22use std::time::Duration;
23
24use crate::line_channel_access_token::apis::{
25 configuration::Configuration as ChannelAccessTokenApiConfiguration, ChannelAccessTokenApiClient,
26};
27use crate::line_insight::apis::{
28 configuration::Configuration as InsightConfiguration, InsightApiClient,
29};
30use crate::line_liff::apis::{configuration::Configuration as LiffConfiguration, LiffApiClient};
31use crate::line_manage_audience::apis::{
32 configuration::Configuration as ManageAudienceConfiguration, ManageAudienceApiClient,
33 ManageAudienceBlobApiClient,
34};
35use crate::line_messaging_api::apis::{
36 configuration::Configuration as MessagingApiConfiguration, MessagingApiApiClient,
37 MessagingApiBlobApiClient,
38};
39use crate::line_module::apis::{
40 configuration::Configuration as LineModuleConfiguration, LineModuleApiClient,
41};
42use crate::line_module_attach::apis::{
43 configuration::Configuration as LineModuleAttachConfiguration, LineModuleAttachApiClient,
44};
45use crate::line_shop::apis::{configuration::Configuration as ShopConfiguration, ShopApiClient};
46use crate::line_webhook::apis::{
47 configuration::Configuration as WebhookConfiguration, DummyApiClient as WebhookDummyApiClient,
48};
49use hyper_rustls::HttpsConnector;
50use hyper_rustls::HttpsConnectorBuilder;
51use hyper_util::client::legacy::connect::HttpConnector;
52use hyper_util::client::legacy::Client;
53use hyper_util::rt::TokioExecutor;
54
55type HttpsClient = HttpsConnector<HttpConnector>;
56
57#[derive(Clone)]
83pub struct LINE {
84 pub channel_access_token_api_client: ChannelAccessTokenApiClient<HttpsClient>,
85 pub insight_api_client: InsightApiClient<HttpsClient>,
86 pub liff_api_client: LiffApiClient<HttpsClient>,
87 pub manage_audience_api_client: ManageAudienceApiClient<HttpsClient>,
88 pub manage_audience_blob_api_client: ManageAudienceBlobApiClient<HttpsClient>,
89 pub messaging_api_client: MessagingApiApiClient<HttpsClient>,
90 pub messaging_api_blob_client: MessagingApiBlobApiClient<HttpsClient>,
91 pub module_api_client: LineModuleApiClient<HttpsClient>,
92 pub module_attach_api_client: LineModuleAttachApiClient<HttpsClient>,
93 pub shop_api_client: ShopApiClient<HttpsClient>,
94 pub webhook_dummy_api_client: WebhookDummyApiClient<HttpsClient>,
95}
96
97impl LINE {
98 pub fn new(token: String) -> LINE {
103 LINEBuilder {
104 token,
105 timeout: None,
106 }
107 .build()
108 }
109
110 pub fn builder(token: String) -> LINEBuilder {
123 LINEBuilder {
124 token,
125 timeout: None,
126 }
127 }
128
129 fn create_hyper_client() -> Client<HttpsClient, String> {
130 let https = HttpsConnectorBuilder::new()
131 .with_native_roots()
132 .expect("no native root certs found")
133 .https_only()
134 .enable_http1()
135 .build();
136 Client::builder(TokioExecutor::new()).build(https)
137 }
138}
139
140pub struct LINEBuilder {
144 token: String,
145 timeout: Option<Duration>,
146}
147
148impl LINEBuilder {
149 pub fn timeout(mut self, duration: Duration) -> Self {
154 self.timeout = Some(duration);
155 self
156 }
157
158 pub fn build(self) -> LINE {
160 let client = LINE::create_hyper_client();
161 let timeout = self.timeout;
162 let token = self.token;
163
164 let mut channel_access_token_api_conf =
166 ChannelAccessTokenApiConfiguration::with_client(client.clone());
167 channel_access_token_api_conf.oauth_access_token = Some(token.to_owned());
168 channel_access_token_api_conf.timeout = timeout;
169 let channel_access_token_api_client =
170 ChannelAccessTokenApiClient::new(Arc::new(channel_access_token_api_conf));
171
172 let mut insight_conf = InsightConfiguration::with_client(client.clone());
174 insight_conf.oauth_access_token = Some(token.to_owned());
175 insight_conf.timeout = timeout;
176 let insight_api_client = InsightApiClient::new(Arc::new(insight_conf));
177
178 let mut liff_conf = LiffConfiguration::with_client(client.clone());
180 liff_conf.oauth_access_token = Some(token.to_owned());
181 liff_conf.timeout = timeout;
182 let liff_api_client = LiffApiClient::new(Arc::new(liff_conf));
183
184 let mut manage_audience_conf = ManageAudienceConfiguration::with_client(client.clone());
186 manage_audience_conf.oauth_access_token = Some(token.to_owned());
187 manage_audience_conf.timeout = timeout;
188 let manage_audience_api_client =
189 ManageAudienceApiClient::new(Arc::new(manage_audience_conf));
190
191 let mut manage_audience_blob_conf =
193 ManageAudienceConfiguration::with_client(client.clone());
194 manage_audience_blob_conf.oauth_access_token = Some(token.to_owned());
195 manage_audience_blob_conf.timeout = timeout;
196 let manage_audience_blob_api_client =
197 ManageAudienceBlobApiClient::new(Arc::new(manage_audience_blob_conf));
198
199 let mut messaging_api_conf = MessagingApiConfiguration::with_client(client.clone());
201 messaging_api_conf.oauth_access_token = Some(token.to_owned());
202 messaging_api_conf.timeout = timeout;
203 let messaging_api_client = MessagingApiApiClient::new(Arc::new(messaging_api_conf));
204
205 let mut messaging_api_blob_conf = MessagingApiConfiguration::with_client(client.clone());
207 messaging_api_blob_conf.oauth_access_token = Some(token.to_owned());
208 messaging_api_blob_conf.timeout = timeout;
209 let messaging_api_blob_client =
210 MessagingApiBlobApiClient::new(Arc::new(messaging_api_blob_conf));
211
212 let mut module_conf = LineModuleConfiguration::with_client(client.clone());
214 module_conf.oauth_access_token = Some(token.to_owned());
215 module_conf.timeout = timeout;
216 let module_api_client = LineModuleApiClient::new(Arc::new(module_conf));
217
218 let mut module_attach_conf = LineModuleAttachConfiguration::with_client(client.clone());
220 module_attach_conf.oauth_access_token = Some(token.to_owned());
221 module_attach_conf.timeout = timeout;
222 let module_attach_api_client = LineModuleAttachApiClient::new(Arc::new(module_attach_conf));
223
224 let mut shop_conf = ShopConfiguration::with_client(client.clone());
226 shop_conf.oauth_access_token = Some(token.to_owned());
227 shop_conf.timeout = timeout;
228 let shop_api_client = ShopApiClient::new(Arc::new(shop_conf));
229
230 let mut webhook_conf = WebhookConfiguration::with_client(client.clone());
232 webhook_conf.oauth_access_token = Some(token.to_owned());
233 webhook_conf.timeout = timeout;
234 let webhook_dummy_api_client = WebhookDummyApiClient::new(Arc::new(webhook_conf));
235
236 LINE {
237 channel_access_token_api_client,
238 insight_api_client,
239 liff_api_client,
240 manage_audience_api_client,
241 manage_audience_blob_api_client,
242 messaging_api_client,
243 messaging_api_blob_client,
244 module_api_client,
245 module_attach_api_client,
246 shop_api_client,
247 webhook_dummy_api_client,
248 }
249 }
250}