diff --git a/Cargo.lock b/Cargo.lock index cfdc244..3e90c05 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8,6 +8,12 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "ascii" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eab1c04a571841102f5345a8fc0f6bb3d31c315dec879b5c6e42e40ce7ffa34e" + [[package]] name = "async-compression" version = "0.3.15" @@ -54,6 +60,12 @@ version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" +[[package]] +name = "byteorder" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" + [[package]] name = "bytes" version = "1.3.0" @@ -94,6 +106,19 @@ dependencies = [ "os_str_bytes", ] +[[package]] +name = "combine" +version = "3.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da3da6baa321ec19e1cc41d31bf599f00c783d0517095cdaf0332e3fe8d20680" +dependencies = [ + "ascii", + "byteorder", + "either", + "memchr", + "unreachable", +] + [[package]] name = "core-foundation" version = "0.9.3" @@ -146,6 +171,8 @@ dependencies = [ "dirs", "eyre", "flate2", + "graphql-introspection-query", + "graphql_client", "hex", "hex-literal", "platform-info", @@ -187,6 +214,12 @@ dependencies = [ "winapi", ] +[[package]] +name = "either" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" + [[package]] name = "encoding_rs" version = "0.8.31" @@ -371,6 +404,65 @@ dependencies = [ "wasi", ] +[[package]] +name = "graphql-introspection-query" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f2a4732cf5140bd6c082434494f785a19cfb566ab07d1382c3671f5812fed6d" +dependencies = [ + "serde", +] + +[[package]] +name = "graphql-parser" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2ebc8013b4426d5b81a4364c419a95ed0b404af2b82e2457de52d9348f0e474" +dependencies = [ + "combine", + "thiserror", +] + +[[package]] +name = "graphql_client" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa61bb9dc6d373a8b465a5da17b62809483e8527a34b0e9034dc0915b09e160a" +dependencies = [ + "graphql_query_derive", + "reqwest", + "serde", + "serde_json", +] + +[[package]] +name = "graphql_client_codegen" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e55df64cc702c4ad6647f8df13a799ad11688a3781fadf5045f7ba12733fa9b" +dependencies = [ + "graphql-introspection-query", + "graphql-parser", + "heck", + "lazy_static", + "proc-macro2", + "quote", + "serde", + "serde_json", + "syn", +] + +[[package]] +name = "graphql_query_derive" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52fc9cde811f44b15ec0692b31e56a3067f6f431c5ace712f286e47c1dacc98" +dependencies = [ + "graphql_client_codegen", + "proc-macro2", + "syn", +] + [[package]] name = "h2" version = "0.3.15" @@ -396,6 +488,12 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +[[package]] +name = "heck" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" + [[package]] name = "hermit-abi" version = "0.2.6" @@ -1154,6 +1252,15 @@ dependencies = [ "tinyvec", ] +[[package]] +name = "unreachable" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56" +dependencies = [ + "void", +] + [[package]] name = "url" version = "2.3.1" @@ -1177,6 +1284,12 @@ version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +[[package]] +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" + [[package]] name = "want" version = "0.3.0" diff --git a/Cargo.toml b/Cargo.toml index aa59e79..bf355ee 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,6 +13,8 @@ clap = "4.1.4" dirs = "4.0.0" eyre = "0.6.8" flate2 = { version = "1.0.25", features = ["zlib"] } +graphql-introspection-query = "0.2.0" +graphql_client = { version = "0.12.0", features = ["reqwest", "reqwest-blocking"] } hex = "0.4.3" hex-literal = "0.3.4" platform-info = "1.0.2" diff --git a/src/lib.rs b/src/lib.rs index efbfbfb..92f0c40 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -6,3 +6,4 @@ pub mod dagger; mod downloader; mod engine; mod schema; +mod session; diff --git a/src/session.rs b/src/session.rs new file mode 100644 index 0000000..4676499 --- /dev/null +++ b/src/session.rs @@ -0,0 +1,34 @@ +use graphql_client::reqwest::post_graphql_blocking; +use graphql_introspection_query::introspection_response::IntrospectionResponse; +use reqwest::blocking::Client; + +use crate::{config::Config, connect_params::ConnectParams}; + +pub struct Session {} + +impl Session { + pub fn new() -> Self { + Self {} + } + + pub fn start(&self, cfg: Config, conn: &ConnectParams) -> eyre::Result { + let client = Client::builder() + .user_agent("graphql-rust/0.10.0") + .default_headers( + std::iter::once(( + reqwest::header::AUTHORIZATION, + reqwest::header::HeaderValue::from_str(&format!( + "Bearer {}", + conn.session_token + )) + .unwrap(), + )) + .collect(), + ) + .build()?; + + let schema = post_graphql_blocking::(&client, conn.url(), vec![]); + + Ok(client) + } +}