diff --git a/Cargo.toml b/Cargo.toml index afe557f..5ca193c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,10 +14,13 @@ repository = "https://github.com/kilork/keycloak" rust-version = "1.87" [features] -default = ["tags-all", "resource-builder"] +default = ["tags-all", "resource-builder", "reqwest"] resource-builder = ["builder", "resource"] schemars = ["dep:schemars"] -multipart = ["reqwest/multipart"] +multipart = ["reqwest12?/multipart", "reqwest13?/multipart"] +reqwest = ["reqwest13"] +reqwest12 = ["dep:reqwest12"] +reqwest13 = ["dep:reqwest13"] rc = ["rc-map", "rc-str", "rc-val", "rc-vec"] rc-map = ["serde/rc"] rc-str = ["serde/rc"] @@ -50,20 +53,29 @@ resource = [] builder = [] [dependencies] -reqwest = { version = "0.12", default-features = false, features = ["json"] } +reqwest12 = { package = "reqwest", version = "0.12", default-features = false, features = [ + "json", +], optional = true } +reqwest13 = { package = "reqwest", version = "0.13", default-features = false, features = [ + "form", + "json", + "query", +], optional = true } serde_json = "1" serde = { version = "1", features = ["derive"] } serde_with = { version = "3", default-features = false, features = ["macros"] } async-trait = "0.1" -schemars = { version = "0.8.11", default-features = false, features = [ - "derive", -], optional = true } -percent-encoding = "2.3.1" +schemars = { version = "0.8.22", optional = true, default-features = false, features = [ "derive" ] } +percent-encoding = "2.3.2" [dev-dependencies] tokio = { version = "1", features = ["full"] } heck = "0.5" -clap = { version = "4", features = ["derive", "help", "std"], default-features = false } -toml = "0.8" +clap = { version = "4", features = [ + "derive", + "help", + "std", +], default-features = false } +toml = "0.9.11" serde = { version = "1", features = ["derive", "rc"] } indexmap = { version = "2", features = ["serde"] } diff --git a/README.md b/README.md index 6366020..2c1edd9 100644 --- a/README.md +++ b/README.md @@ -10,13 +10,16 @@ Implements [Keycloak Admin REST API version 26.4.0](https://www.keycloak.org/doc ### Feature flags -Default flags: `tags-all`. +Default flags: `tags-all`, `resource-builder`, `reqwest`. - `rc`: use `Arc` for deserialization. - `schemars`: add [schemars](https://crates.io/crates/schemars) support. - `multipart`: add multipart support to reqwest, enabling extra methods in API. - `tags-all`: activate all tags (resource groups) in REST API, it is default behavior. Disable default features and use individual `tag-xxx` features to activate only required resource groups. For a full list reference the [Cargo.toml](Cargo.toml). - `resource-builder`: add resource builder support. +- `reqwest`: use up to date [reqwest](https://crates.io/crates/reqwest) version (`reqwest 0.13.x`). +- `reqwest12`: use `reqwest 0.12.x`. +- `reqwest13`: use `reqwest 0.13.x`. ## Usage diff --git a/examples/adduser.rs b/examples/adduser.rs index bdc8615..b5495d3 100644 --- a/examples/adduser.rs +++ b/examples/adduser.rs @@ -1,6 +1,7 @@ #[tokio::main] async fn main() -> Result<(), Box> { use keycloak::{ + prelude::reqwest, types::*, {KeycloakAdmin, KeycloakAdminToken}, }; diff --git a/examples/importconfig.rs b/examples/importconfig.rs index 45db146..0e1b696 100644 --- a/examples/importconfig.rs +++ b/examples/importconfig.rs @@ -2,7 +2,10 @@ async fn main() -> Result<(), Box> { #[cfg(feature = "multipart")] { - use keycloak::{KeycloakAdmin, KeycloakAdminToken}; + use keycloak::{ + prelude::reqwest, + {KeycloakAdmin, KeycloakAdminToken}, + }; let url = std::env::var("KEYCLOAK_ADDR").unwrap_or_else(|_| "http://localhost:8080".into()); let user = std::env::var("KEYCLOAK_USER").unwrap_or_else(|_| "admin".into()); diff --git a/examples/openapi.rs b/examples/openapi.rs index b2e5859..95eeb83 100644 --- a/examples/openapi.rs +++ b/examples/openapi.rs @@ -81,6 +81,8 @@ mod openapi { use indexmap::IndexMap; use serde::Deserialize; + use keycloak::prelude::reqwest; + use crate::{RESERVED_WORDS, TAG_NONE}; #[derive(Debug, PartialEq, Eq)] diff --git a/examples/resource_adduser.rs b/examples/resource_adduser.rs index 2a237b7..266cd51 100644 --- a/examples/resource_adduser.rs +++ b/examples/resource_adduser.rs @@ -3,7 +3,7 @@ fn main() {} #[cfg(all(feature = "builder", feature = "resource"))] #[tokio::main] async fn main() -> Result<(), Box> { - use keycloak::{types::*, KeycloakAdmin, KeycloakAdminToken}; + use keycloak::{prelude::reqwest, types::*, KeycloakAdmin, KeycloakAdminToken}; const REALM: &str = "resource"; diff --git a/rust-toolchain.toml b/rust-toolchain.toml new file mode 100644 index 0000000..b50a901 --- /dev/null +++ b/rust-toolchain.toml @@ -0,0 +1,4 @@ +[toolchain] +channel = "1.87" +profile = "minimal" +components = [ "rustfmt", "clippy", "rust-analyzer" ] diff --git a/src/error.rs b/src/error.rs index ed06bf3..9667825 100644 --- a/src/error.rs +++ b/src/error.rs @@ -2,6 +2,8 @@ use std::{borrow::Cow, error::Error, fmt::Display}; use serde::{Deserialize, Serialize}; +use crate::prelude::reqwest; + #[derive(Debug)] pub enum KeycloakError { ReqwestFailure(reqwest::Error), diff --git a/src/lib.rs b/src/lib.rs index 0f67c05..1bebb0f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -33,7 +33,11 @@ keycloak = "~26.4" ```rust, no_run #[tokio::main] async fn main() -> Result<(), Box> { - use keycloak::{types::*, KeycloakAdmin, KeycloakAdminToken}; + use keycloak::{ + prelude::reqwest, + types::*, + {KeycloakAdmin, KeycloakAdminToken}, + }; const REALM: &str = "resource"; @@ -110,6 +114,7 @@ pub mod resource; pub mod types; mod error; +pub mod prelude; mod rest; pub use error::KeycloakError; diff --git a/src/prelude.rs b/src/prelude.rs new file mode 100644 index 0000000..5640e61 --- /dev/null +++ b/src/prelude.rs @@ -0,0 +1,6 @@ +#[cfg(all(feature = "reqwest12", not(feature = "reqwest13")))] +pub use reqwest12 as reqwest; +#[cfg(all(feature = "reqwest12", feature = "reqwest13"))] +pub use reqwest13 as reqwest; +#[cfg(all(feature = "reqwest13", not(feature = "reqwest12")))] +pub use reqwest13 as reqwest; diff --git a/src/rest/default_response.rs b/src/rest/default_response.rs index 31f9195..bf9748d 100644 --- a/src/rest/default_response.rs +++ b/src/rest/default_response.rs @@ -1,4 +1,4 @@ -use reqwest::Response; +use crate::prelude::reqwest::{self, Response}; /// Default adapter around [Response]. pub struct DefaultResponse(Response); diff --git a/src/rest/mod.rs b/src/rest/mod.rs index 94c2c9e..7e36a43 100644 --- a/src/rest/mod.rs +++ b/src/rest/mod.rs @@ -3,7 +3,7 @@ use std::future::Future; use async_trait::async_trait; use serde::{Deserialize, Serialize}; -use crate::{types::*, KeycloakError}; +use crate::{prelude::reqwest, types::*, KeycloakError}; mod default_response; mod generated_rest; diff --git a/templates/README.md b/templates/README.md index 404d1c7..e00b8bc 100644 --- a/templates/README.md +++ b/templates/README.md @@ -10,13 +10,16 @@ Implements [Keycloak Admin REST API version {{ env_var "KEYCLOAK_VERSION" }}](ht ### Feature flags -Default flags: `tags-all`. +Default flags: `tags-all`, `resource-builder`, `reqwest`. - `rc`: use `Arc` for deserialization. - `schemars`: add [schemars](https://crates.io/crates/schemars) support. - `multipart`: add multipart support to reqwest, enabling extra methods in API. - `tags-all`: activate all tags (resource groups) in REST API, it is default behavior. Disable default features and use individual `tag-xxx` features to activate only required resource groups. For a full list reference the [Cargo.toml](Cargo.toml). - `resource-builder`: add resource builder support. +- `reqwest`: use up to date [reqwest](https://crates.io/crates/reqwest) version (`reqwest 0.13.x`). +- `reqwest12`: use `reqwest 0.12.x`. +- `reqwest13`: use `reqwest 0.13.x`. ## Usage diff --git a/templates/src/lib.rs b/templates/src/lib.rs index 16c7261..a0ad20e 100644 --- a/templates/src/lib.rs +++ b/templates/src/lib.rs @@ -9,6 +9,7 @@ pub mod resource; pub mod types; mod error; +pub mod prelude; mod rest; pub use error::KeycloakError;