From e76903ca109181728c53299c1b53360f965f86ed Mon Sep 17 00:00:00 2001 From: bouzuya Date: Tue, 17 May 2022 07:04:10 +0900 Subject: [PATCH] bex: Add request body struct --- bex/Cargo.lock | 14 ++++++++++++++ bex/Cargo.toml | 2 +- bex/src/main.rs | 39 ++++++++++++++++++++++++++++----------- 3 files changed, 43 insertions(+), 12 deletions(-) diff --git a/bex/Cargo.lock b/bex/Cargo.lock index 95ec64d2..8202e9fc 100644 --- a/bex/Cargo.lock +++ b/bex/Cargo.lock @@ -629,6 +629,20 @@ name = "serde" version = "1.0.137" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.137" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] [[package]] name = "serde_json" diff --git a/bex/Cargo.toml b/bex/Cargo.toml index bd1d3cff..7eb57fe8 100644 --- a/bex/Cargo.toml +++ b/bex/Cargo.toml @@ -8,5 +8,5 @@ edition = "2021" [dependencies] anyhow = "1.0.57" reqwest = { version = "0.11", features = ["json"] } -serde = "1.0.137" +serde = { version = "1.0.137", features = ["derive"] } tokio = { version = "1", features = ["full"] } diff --git a/bex/src/main.rs b/bex/src/main.rs index 5fbb9506..3bc32f7e 100644 --- a/bex/src/main.rs +++ b/bex/src/main.rs @@ -25,12 +25,21 @@ async fn main() -> anyhow::Result<()> { let state = "state1"; // Step 2: Obtain a request token - let url = "https://getpocket.com/v3/oauth/request"; - let mut body = HashMap::new(); - body.entry("consumer_key").or_insert(consumer_key.as_str()); - body.entry("redirect_uri").or_insert(redirect_uri); - body.entry("state").or_insert(state); - let resp = post(url, &body).await?; + #[derive(Debug, Serialize)] + struct OAuthRequestRequestBody<'a> { + consumer_key: &'a str, + redirect_uri: &'a str, + state: Option<&'a str>, + } + let resp = post( + "https://getpocket.com/v3/oauth/request", + &OAuthRequestRequestBody { + consumer_key: consumer_key.as_str(), + redirect_uri, + state: Some(state), + }, + ) + .await?; // TODO: check status code // println!("{:#?}", resp); @@ -56,11 +65,19 @@ async fn main() -> anyhow::Result<()> { io::stdin().read_line(&mut buffer)?; // Step 5: Convert a request token into a Pocket access token - let url = "https://getpocket.com/v3/oauth/authorize"; - let mut body = HashMap::new(); - body.entry("consumer_key").or_insert(consumer_key.as_str()); - body.entry("code").or_insert(request_token); - let resp = post(url, &body).await?; + #[derive(Debug, Serialize)] + struct OAuthAuthorizeRequestBody<'a> { + consumer_key: &'a str, + code: &'a str, + } + let resp = post( + "https://getpocket.com/v3/oauth/authorize", + &OAuthAuthorizeRequestBody { + consumer_key: consumer_key.as_str(), + code: request_token, + }, + ) + .await?; println!("{:#?}", resp); // "{\"access_token\":\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxx\",\"username\":\"xxxxxxx\",\"state\":\"state1\"}"