diff options
author | Guillaume Pasquet <dev@etenil.net> | 2021-11-16 22:36:42 +0000 |
---|---|---|
committer | Guillaume Pasquet <dev@etenil.net> | 2021-11-16 22:36:42 +0000 |
commit | 42b945b7289d8e36900074327a811a50f8cc5e15 (patch) | |
tree | 193e964f51cc12902c0fe10067c47e58ee8a54fc | |
parent | c9486ece952d2e07a78192a9ae0e7764fdee4164 (diff) |
Working actual queries and basic JSON formatting. No error handling.
-rw-r--r-- | Cargo.lock | 141 | ||||
-rw-r--r-- | Cargo.toml | 6 | ||||
-rw-r--r-- | src/barbfile.rs | 35 | ||||
-rw-r--r-- | src/main.rs | 17 | ||||
-rw-r--r-- | test.barb | 2 |
5 files changed, 185 insertions, 16 deletions
@@ -3,9 +3,32 @@ version = 3 [[package]] +name = "ansi_term" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" +dependencies = [ + "winapi", +] + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi", + "libc", + "winapi", +] + +[[package]] name = "barb" version = "0.1.0" dependencies = [ + "jsonformat", + "serde", + "serde_json", "ureq", ] @@ -16,6 +39,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" [[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] name = "bumpalo" version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -40,6 +69,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fff857943da45f546682664a79488be82e69e43c1a7a2307679ab9afb3a66d2e" [[package]] +name = "clap" +version = "2.33.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002" +dependencies = [ + "ansi_term", + "atty", + "bitflags", + "strsim", + "textwrap", + "unicode-width", + "vec_map", +] + +[[package]] name = "form_urlencoded" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -50,6 +94,15 @@ dependencies = [ ] [[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + +[[package]] name = "idna" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -61,6 +114,12 @@ dependencies = [ ] [[package]] +name = "itoa" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" + +[[package]] name = "js-sys" version = "0.3.53" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -70,6 +129,15 @@ dependencies = [ ] [[package]] +name = "jsonformat" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413d4928831a72ed2fdc794d1425be18e5f5ea822f92e557c52f150bcc182f35" +dependencies = [ + "clap", +] + +[[package]] name = "lazy_static" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -143,11 +211,10 @@ dependencies = [ [[package]] name = "rustls" -version = "0.19.1" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" +checksum = "dac4581f0fc0e0efd529d069e8189ec7b90b8e7680e21beb35141bdc45f36040" dependencies = [ - "base64", "log", "ring", "sct", @@ -155,22 +222,51 @@ dependencies = [ ] [[package]] +name = "ryu" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" + +[[package]] name = "sct" -version = "0.6.1" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" +checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" dependencies = [ "ring", "untrusted", ] [[package]] +name = "serde" +version = "1.0.130" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913" + +[[package]] +name = "serde_json" +version = "1.0.70" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e277c495ac6cd1a01a58d0a0c574568b4d1ddf14f59965c6a58b8d96400b54f3" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] name = "spin" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] +name = "strsim" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" + +[[package]] name = "syn" version = "1.0.75" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -182,6 +278,15 @@ dependencies = [ ] [[package]] +name = "textwrap" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" +dependencies = [ + "unicode-width", +] + +[[package]] name = "tinyvec" version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -212,6 +317,12 @@ dependencies = [ ] [[package]] +name = "unicode-width" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" + +[[package]] name = "unicode-xid" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -225,15 +336,17 @@ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "ureq" -version = "2.2.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3131cd6cb18488da91da1d10ed31e966f453c06b65bf010d35638456976a3fd7" +checksum = "c5c448dcb78ec38c7d59ec61f87f70a98ea19171e06c139357e012ee226fec90" dependencies = [ "base64", "chunked_transfer", "log", "once_cell", "rustls", + "serde", + "serde_json", "url", "webpki", "webpki-roots", @@ -252,6 +365,12 @@ dependencies = [ ] [[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + +[[package]] name = "wasm-bindgen" version = "0.2.76" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -317,9 +436,9 @@ dependencies = [ [[package]] name = "webpki" -version = "0.21.4" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea" +checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" dependencies = [ "ring", "untrusted", @@ -327,9 +446,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.21.1" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aabe153544e473b775453675851ecc86863d2a81d786d741f6b76778f2a48940" +checksum = "c475786c6f47219345717a043a37ec04cb4bc185e28853adcc4fa0a947eba630" dependencies = [ "webpki", ] @@ -6,4 +6,8 @@ edition = "2018" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -ureq = "2.2.0" +ureq = { version = "2.3.1", features = ["json"] } +serde = "*" +serde_json = "*" +jsonformat = "1.2.0" + diff --git a/src/barbfile.rs b/src/barbfile.rs index be7cead..31c1eac 100644 --- a/src/barbfile.rs +++ b/src/barbfile.rs @@ -1,9 +1,10 @@ use std::matches; use std::str::FromStr; +use std::string::ToString; use std::{error::Error, fmt}; #[derive(Debug)] -struct BarbParseError {} +pub struct BarbParseError {} impl Error for BarbParseError {} @@ -36,6 +37,18 @@ impl FromStr for Method { } } +impl ToString for Method { + fn to_string(&self) -> String { + match self { + Self::GET => String::from("GET"), + Self::PUT => String::from("PUT"), + Self::POST => String::from("POST"), + Self::PATCH => String::from("PATCH"), + Self::DELETE => String::from("DELETE"), + } + } +} + #[derive(Debug)] struct Header { name: String, @@ -66,11 +79,29 @@ impl BarbHeader { } } -struct BarbFile { +pub struct BarbFile { header: BarbHeader, body: Option<String>, } +impl BarbFile { + pub fn headers(&self) -> &Vec<Header> { + &self.header.headers + } + + pub fn method(&self) -> &Method { + &self.header.method + } + + pub fn method_as_string(&self) -> String { + self.header.method.to_string() + } + + pub fn url(&self) -> &String { + &self.header.url + } +} + fn decode_url_line(line: &str) -> Result<(Method, String), BarbParseError> { let mut components = line[1..].split('^'); let meth = components.next().ok_or(BarbParseError {})?; diff --git a/src/main.rs b/src/main.rs index 816bebc..b6255d7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,9 +1,22 @@ mod barbfile; +use jsonformat::{format_json, Indentation}; + use std::fs; +use std::str::FromStr; use ureq; fn main() { - let barbfile = fs::read_to_string("test.barb").expect("Failed to read file"); - ureq::get("https://api.met.no/weatherapi/tafmetar/1.0/tafmetar?icao=EGKK"); + let bfile = barbfile::BarbFile::from_str( + fs::read_to_string("test.barb") + .expect("Failed to read file") + .as_str(), + ) + .expect("Failed to parse file"); + let result = ureq::request(bfile.method_as_string().as_str(), &bfile.url()) + .call() + .unwrap() + .into_string() + .unwrap(); + println!("{}", format_json(result.as_str(), Indentation::Default)); } diff --git a/test.barb b/test.barb new file mode 100644 index 0000000..b49f5c8 --- /dev/null +++ b/test.barb @@ -0,0 +1,2 @@ +#GET^https://catfact.ninja/fact + |