line_bot_sdk_rust/client/
mod.rs

1/*
2* Copyright 2023 nanato12
3*
4* Licensed under the Apache License, Version 2.0 (the "License");
5* you may not use this file except in compliance with the License.
6* You may obtain a copy of the License at
7*
8*     http://www.apache.org/licenses/LICENSE-2.0
9*
10* Unless required by applicable law or agreed to in writing, software
11* distributed under the License is distributed on an "AS IS" BASIS,
12* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13* See the License for the specific language governing permissions and
14* limitations under the License.
15*/
16
17use std::rc::Rc;
18
19use hyper::{client::HttpConnector, Client as hyperClient};
20use hyper_rustls::HttpsConnector;
21use hyper_rustls::HttpsConnectorBuilder;
22use line_channel_access_token::apis::{
23    configuration::Configuration as ChannelAccessTokenApiConfiguration, ChannelAccessTokenApiClient,
24};
25use line_insight::apis::{configuration::Configuration as InsightConfiguration, InsightApiClient};
26use line_liff::apis::{configuration::Configuration as LiffConfiguration, LiffApiClient};
27use line_manage_audience::apis::{
28    configuration::Configuration as ManageAudienceConfiguration, ManageAudienceApiClient,
29};
30use line_messaging_api::apis::{
31    configuration::Configuration as MessagingApiConfiguration, MessagingApiApiClient,
32};
33use line_module::apis::{
34    configuration::Configuration as LineModuleConfiguration, LineModuleApiClient,
35};
36use line_module_attach::apis::{
37    configuration::Configuration as LineModuleAttachConfiguration, LineModuleAttachApiClient,
38};
39use line_shop::apis::{configuration::Configuration as ShopConfiguration, ShopApiClient};
40use line_webhook::apis::{
41    configuration::Configuration as WebhookConfiguration, DummyApiClient as WebhookDummyApiClient,
42};
43
44type C = HttpsConnector<HttpConnector>;
45
46pub struct LINE {
47    pub channel_access_token_api_client: ChannelAccessTokenApiClient<C>,
48    pub insight_api_client: InsightApiClient<C>,
49    pub liff_api_client: LiffApiClient<C>,
50    pub manage_audience_api_client: ManageAudienceApiClient<C>,
51    pub messaging_api_client: MessagingApiApiClient<C>,
52    pub module_api_client: LineModuleApiClient<C>,
53    pub module_attach_api_client: LineModuleAttachApiClient<C>,
54    pub shop_api_client: ShopApiClient<C>,
55    pub webhook_dummy_api_client: WebhookDummyApiClient<C>,
56}
57
58impl LINE {
59    pub fn new(token: String) -> LINE {
60        let client = LINE::create_hyper_client();
61
62        // channel_access_token_api
63        let mut channel_access_token_api_conf =
64            ChannelAccessTokenApiConfiguration::new(client.clone());
65        channel_access_token_api_conf.oauth_access_token = Some(token.to_owned());
66        let channel_access_token_api_client =
67            ChannelAccessTokenApiClient::new(Rc::new(channel_access_token_api_conf));
68
69        // insight
70        let mut insight_conf = InsightConfiguration::new(client.clone());
71        insight_conf.oauth_access_token = Some(token.to_owned());
72        let insight_api_client = InsightApiClient::new(Rc::new(insight_conf));
73
74        // liff
75        let mut liff_conf = LiffConfiguration::new(client.clone());
76        liff_conf.oauth_access_token = Some(token.to_owned());
77        let liff_api_client = LiffApiClient::new(Rc::new(liff_conf));
78
79        // manage_audience
80        let mut manage_audience_conf = ManageAudienceConfiguration::new(client.clone());
81        manage_audience_conf.oauth_access_token = Some(token.to_owned());
82        let manage_audience_api_client =
83            ManageAudienceApiClient::new(Rc::new(manage_audience_conf));
84
85        // messaging_api
86        let mut messaging_api_conf = MessagingApiConfiguration::new(client.clone());
87        messaging_api_conf.oauth_access_token = Some(token.to_owned());
88        let messaging_api_client = MessagingApiApiClient::new(Rc::new(messaging_api_conf));
89
90        // module
91        let mut module_conf = LineModuleConfiguration::new(client.clone());
92        module_conf.oauth_access_token = Some(token.to_owned());
93        let module_api_client = LineModuleApiClient::new(Rc::new(module_conf));
94
95        // module_attach
96        let mut module_attach_conf = LineModuleAttachConfiguration::new(client.clone());
97        module_attach_conf.oauth_access_token = Some(token.to_owned());
98        let module_attach_api_client = LineModuleAttachApiClient::new(Rc::new(module_attach_conf));
99
100        // shop
101        let mut shop_conf = ShopConfiguration::new(client.clone());
102        shop_conf.oauth_access_token = Some(token.to_owned());
103        let shop_api_client = ShopApiClient::new(Rc::new(shop_conf));
104
105        // webhook
106        let mut webhook_conf = WebhookConfiguration::new(client.clone());
107        webhook_conf.oauth_access_token = Some(token.to_owned());
108        let webhook_dummy_api_client = WebhookDummyApiClient::new(Rc::new(webhook_conf));
109
110        LINE {
111            channel_access_token_api_client,
112            insight_api_client,
113            liff_api_client,
114            manage_audience_api_client,
115            messaging_api_client,
116            module_api_client,
117            module_attach_api_client,
118            shop_api_client,
119            webhook_dummy_api_client,
120        }
121    }
122
123    fn create_hyper_client() -> hyperClient<C> {
124        let https = HttpsConnectorBuilder::new()
125            .with_native_roots()
126            .https_only()
127            .enable_http1()
128            .build();
129        hyperClient::builder().build::<_, hyper::Body>(https)
130    }
131}