Skip to content

Commit cbd70d2

Browse files
authored
Merge pull request #9 from nanato12/feature/lib
[Parent] Add Library
2 parents b2a0149 + 3e4e281 commit cbd70d2

34 files changed

+676
-1
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ edition = "2018"
99
[dependencies]
1010
rocket = "0.4"
1111
rocket_contrib = { version = "0.4", features = ["json"] }
12-
surf = "1.0.3"
12+
reqwest = { version = "0.11.0", features = ["blocking", "json"] }
1313
serde = { version = "1.0", features = ["derive"] }
1414
async-std = { version = "1.5.0", features = ["attributes"] }
1515
serde_json = "1.0"

src/bot.rs

Whitespace-only changes.

src/client.rs

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
use reqwest::blocking::{Client, Response};
2+
use reqwest::header::{HeaderMap, HeaderValue, AUTHORIZATION, CONTENT_TYPE};
3+
use reqwest::Error;
4+
use reqwest::Url;
5+
use serde_json::Value;
6+
7+
static BASE_URL: &str = "https://api.line.me/v2/bot/";
8+
9+
#[derive(Debug)]
10+
pub struct HttpClient {
11+
client: Client,
12+
headers: HeaderMap,
13+
endpoint_base: String,
14+
}
15+
16+
impl HttpClient {
17+
pub fn new(channel_token: &str) -> HttpClient {
18+
let mut headers = HeaderMap::new();
19+
headers.insert(
20+
AUTHORIZATION,
21+
format!("Bearer {}", channel_token).parse().unwrap(),
22+
);
23+
headers.insert(CONTENT_TYPE, HeaderValue::from_static("application/json"));
24+
HttpClient {
25+
client: Client::new(),
26+
headers: headers,
27+
endpoint_base: String::from(BASE_URL),
28+
}
29+
}
30+
31+
pub fn get(&self, endpoint: &str, data: Value) -> Result<Response, Error> {
32+
let uri = Url::parse(&format!("{}{}", self.endpoint_base, endpoint)).unwrap();
33+
self.client
34+
.get(uri)
35+
.headers(self.headers.clone())
36+
.json(&data)
37+
.send()
38+
}
39+
40+
pub fn post(&self, endpoint: &str, data: Value) -> Result<Response, Error> {
41+
let uri = Url::parse(&format!("{}{}", self.endpoint_base, endpoint)).unwrap();
42+
self.client
43+
.post(uri)
44+
.headers(self.headers.clone())
45+
.json(&data)
46+
.send()
47+
}
48+
}

src/events/account_link.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
use crate::events::Source;
2+
3+
use serde_derive::Deserialize;
4+
5+
#[derive(Deserialize, Debug)]
6+
pub struct AccountLinkEvent {
7+
#[serde(rename = "replyToken")]
8+
pub reply_token: String,
9+
pub mode: String,
10+
pub timestamp: i64,
11+
pub source: Source,
12+
pub link: Link,
13+
}
14+
15+
#[derive(Deserialize, Debug)]
16+
pub struct Link {
17+
pub result: String,
18+
pub nonce: String,
19+
}

src/events/beacon.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
use crate::events::Source;
2+
3+
use serde_derive::Deserialize;
4+
5+
#[derive(Deserialize, Debug)]
6+
pub struct BeaconEvent {
7+
#[serde(rename = "replyToken")]
8+
pub reply_token: String,
9+
pub mode: String,
10+
pub timestamp: i64,
11+
pub source: Source,
12+
pub beacon: Beacon,
13+
}
14+
15+
#[derive(Deserialize, Debug)]
16+
pub struct Beacon {
17+
pub hwid: String,
18+
pub r#type: String,
19+
pub dm: Option<String>,
20+
}

src/events/follow.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
use crate::events::Source;
2+
3+
use serde_derive::Deserialize;
4+
5+
#[derive(Deserialize, Debug)]
6+
pub struct FollowEvent {
7+
#[serde(rename = "replyToken")]
8+
pub reply_token: Option<String>,
9+
pub mode: String,
10+
pub timestamp: i64,
11+
pub source: Source,
12+
}

src/events/join.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
use crate::events::Source;
2+
3+
use serde_derive::Deserialize;
4+
5+
#[derive(Deserialize, Debug)]
6+
pub struct JoinEvent {
7+
#[serde(rename = "replyToken")]
8+
pub reply_token: String,
9+
pub mode: String,
10+
pub timestamp: i64,
11+
pub source: Source,
12+
}

src/events/leave.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
use crate::events::Source;
2+
3+
use serde_derive::Deserialize;
4+
5+
#[derive(Deserialize, Debug)]
6+
pub struct LeaveEvent {
7+
pub mode: String,
8+
pub timestamp: i64,
9+
pub source: Source,
10+
}

src/events/member.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
use serde_derive::Deserialize;
2+
3+
#[derive(Deserialize, Debug)]
4+
pub struct Member {
5+
pub r#type: String,
6+
#[serde(rename = "userId")]
7+
pub user_id: String,
8+
}

src/events/member_join.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
use crate::events::Member;
2+
use crate::events::Source;
3+
4+
use serde_derive::Deserialize;
5+
6+
#[derive(Deserialize, Debug)]
7+
pub struct MemberJoinEvent {
8+
#[serde(rename = "replyToken")]
9+
pub reply_token: String,
10+
pub mode: String,
11+
pub timestamp: i64,
12+
pub source: Source,
13+
pub joined: Joined,
14+
}
15+
16+
#[derive(Deserialize, Debug)]
17+
pub struct Joined {
18+
pub members: Vec<Member>,
19+
}

0 commit comments

Comments
 (0)