diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index a99659b..1865d31 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -5,8 +5,8 @@
 ### Checklist
 - [ ] Formatted code using `cargo fmt --all`
 - [ ] Linted code using clippy
-  - [ ] with reqwest feature: `cargo clippy --manifest-path influxdb/Cargo.toml --all-targets --no-default-features --features use-serde,derive,reqwest-client -- -D warnings`
-  - [ ] with surf feature: `cargo clippy --manifest-path influxdb/Cargo.toml --all-targets --no-default-features --features use-serde,derive,hyper-client -- -D warnings`
+  - [ ] with reqwest feature: `cargo clippy --manifest-path influxdb/Cargo.toml --all-targets --no-default-features --features serde,derive,reqwest-client-rustls -- -D warnings`
+  - [ ] with surf feature: `cargo clippy --manifest-path influxdb/Cargo.toml --all-targets --no-default-features --features serde,derive,hyper-client -- -D warnings`
 - [ ] Updated README.md using `cargo doc2readme -p influxdb --expand-macros`
 - [ ] Reviewed the diff. Did you leave any print statements or unnecessary comments?
 - [ ] Any unfinished work that warrants a separate issue captured in an issue with a TODO code comment
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 0000000..ce05b98
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,8 @@
+version: 2
+updates:
+  - package-ecosystem: "github-actions"
+    directory: "/"
+    schedule:
+      interval: weekly
+      time: "06:00"
+      timezone: "Europe/Amsterdam"
diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml
index 8658eca..d841d77 100644
--- a/.github/workflows/rust.yml
+++ b/.github/workflows/rust.yml
@@ -12,8 +12,8 @@ jobs:
     name: README Format Check
     runs-on: ubuntu-latest
     steps:
-      - uses: actions/checkout@v3
-      - uses: docker://ghcr.io/msrd0/cargo-doc2readme:nightly
+      - uses: actions/checkout@v4
+      - uses: docker://codeberg.org/msrd0/cargo-doc2readme:nightly
         with:
           entrypoint: cargo
           args: doc2readme -p influxdb --expand-macros --check
@@ -23,27 +23,41 @@ jobs:
     name: Style Check (clippy)
     runs-on: ubuntu-latest
     steps:
-      - uses: actions/checkout@v3
+      - uses: actions/checkout@v4
       - uses: dtolnay/rust-toolchain@1.75.0
         with:
           components: clippy
       - name: Check Clippy lints (reqwest)
-        run: cargo clippy --manifest-path influxdb/Cargo.toml --all-targets --no-default-features --features use-serde,derive,reqwest-client -- -D warnings
+        run: cargo clippy --manifest-path influxdb/Cargo.toml --all-targets --no-default-features --features serde,derive,reqwest-client-rustls -- -D warnings
       - name: Check Clippy lints (surf)
-        run: cargo clippy --manifest-path influxdb/Cargo.toml --all-targets --no-default-features --features use-serde,derive,hyper-client -- -D warnings
+        run: cargo clippy --manifest-path influxdb/Cargo.toml --all-targets --no-default-features --features serde,derive,hyper-client -- -D warnings
 
   # this checks that the code is formatted with rustfmt
   rustfmt:
     name: Style Checks (rustfmt)
     runs-on: ubuntu-latest
     steps:
-      - uses: actions/checkout@v3
+      - uses: actions/checkout@v4
       - uses: dtolnay/rust-toolchain@nightly
         with:
           components: rustfmt
       - name: Check code formatting
         run: cargo fmt --all -- --check
 
+  # this checks the msrv
+  msrv:
+    name: Verify MSRV
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v4
+      - uses: baptiste0928/cargo-install@v3
+        with:
+          crate: cargo-msrv
+      - name: Verify minimum rust version of influxdb crate
+        run: cargo msrv --path influxdb --output-format json verify
+      - name: Verify minimum rust version of influxdb_derive crate
+        run: cargo msrv --path influxdb_derive --output-format json verify
+
   # this tests that all unit and doc tests are successful
   unit_tests:
     name: Unit and Doc Tests (Rust ${{matrix.rust.name}} on ${{matrix.os}})
@@ -53,9 +67,6 @@ jobs:
       fail-fast: false
       matrix:
         rust:
-          - name: MSRV
-            toolchain: "1.65"
-            nightly: false
           - name: Stable
             toolchain: stable
             nightly: false
@@ -67,18 +78,18 @@ jobs:
             nightly: true
         os: [ubuntu-latest, windows-latest, macOS-latest]
     steps:
-      - uses: actions/checkout@v3
+      - uses: actions/checkout@v4
       - uses: dtolnay/rust-toolchain@master
         with:
           toolchain: ${{matrix.rust.toolchain}}
         id: rust-toolchain
-      - uses: actions/cache@v3
+      - uses: actions/cache@v4
         with:
           path: |
             ~/.cargo/git
             ~/.cargo/registry
             target
-          key: "${{runner.os}} Rust ${{steps.rust-toolchain.outputs.cachekey}}"
+          key: "${{matrix.rust.toolchain}} on ${{runner.os}} Rust ${{steps.rust-toolchain.outputs.cachekey}}"
       - run: cargo test --lib
       - run: cargo test --doc
 
@@ -94,7 +105,14 @@ jobs:
           - name: Stable
             toolchain: stable
             nightly: false
-        http-backend: [curl-client, h1-client, h1-client-rustls, hyper-client, reqwest-client, reqwest-client-rustls]
+        http-backend:
+          - curl-client
+          - h1-client
+          - h1-client-rustls
+          - hyper-client
+          - reqwest-client-rustls
+          - reqwest-client-native-tls
+          - reqwest-client-native-tls-vendored
     services:
       influxdb:
         image: influxdb:1.8
@@ -122,12 +140,12 @@ jobs:
           DOCKER_INFLUXDB_INIT_BUCKET: mydb
           DOCKER_INFLUXDB_INIT_ADMIN_TOKEN: admintoken
     steps:
-      - uses: actions/checkout@v3
+      - uses: actions/checkout@v4
       - uses: dtolnay/rust-toolchain@master
         with:
           toolchain: ${{matrix.rust.toolchain}}
         id: rust-toolchain
-      - uses: actions/cache@v3
+      - uses: actions/cache@v4
         with:
           path: |
             ~/.cargo/git
@@ -138,7 +156,7 @@ jobs:
         run: |
           for test in integration_tests{,_v2}
           do
-            cargo test -p influxdb --no-default-features --features 'use-serde derive ${{matrix.http-backend}}' --no-fail-fast --test $test
+            cargo test -p influxdb --no-default-features --features 'serde derive ${{matrix.http-backend}}' --no-fail-fast --test $test
           done
 
   # this uses cargo-tarpaulin to inspect the code coverage
@@ -162,13 +180,13 @@ jobs:
           INFLUXDB_USER_PASSWORD: password
 
     steps:
-      - uses: actions/checkout@v3
+      - uses: actions/checkout@v4
       - uses: dtolnay/rust-toolchain@stable
         id: rust-toolchain
       - name: Get Tarpaulin Version
         id: tarpaulin-version
         run: echo "version=$(wget -qO- 'https://crates.io/api/v1/crates/cargo-tarpaulin' | jq -r '.crate.max_stable_version')" >>$GITHUB_OUTPUT
-      - uses: actions/cache@v3
+      - uses: actions/cache@v4
         with:
           path: |
             ~/.cargo/bin/cargo-tarpaulin
@@ -185,7 +203,7 @@ jobs:
           cargo tarpaulin -v \
             --target-dir target/tarpaulin \
             --workspace \
-            --features use-serde,derive \
+            --features serde,derive \
             --exclude-files 'derive/*' \
             --exclude-files 'target/*' \
             --ignore-panics --ignore-tests \
@@ -193,7 +211,7 @@ jobs:
         env:
           RUST_BACKTRACE: 1
           RUST_LOG: info
-      - uses: actions/upload-artifact@v3
+      - uses: actions/upload-artifact@v4
         with:
           name: tarpaulin-report
           path: |
@@ -207,10 +225,10 @@ jobs:
       - coverage
     if: github.ref == 'refs/heads/main'
     steps:
-      - uses: actions/checkout@v3
+      - uses: actions/checkout@v4
         with:
           ref: gh-pages
-      - uses: actions/download-artifact@v3
+      - uses: actions/download-artifact@v4
         with:
           name: tarpaulin-report
       - run: |
@@ -220,6 +238,6 @@ jobs:
 
           git add coverage.svg tarpaulin-report.html
           git status
-      - uses: stefanzweifel/git-auto-commit-action@v4
+      - uses: stefanzweifel/git-auto-commit-action@v5
         with:
           commit_message: "GitHub Pages for ${{ github.sha }}"
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3982d81..8357d58 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -72,7 +72,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 
 -  Batch write support ([@sunng87](https://github.com/sunng87) in [#87](https://github.com/influxdb-rs/influxdb-rust/pull/87))
 
-    Build a query containing mutliple rows to be inserted
+    Build a query containing multiple rows to be inserted
     ```
     let q0 = Timestamp::Hours(11)
         .into_query("weather")
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 1f9008d..0b02f30 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -139,7 +139,7 @@ Please open an issue if you have suggestions for new labels.
 | Issue label          | List issues                                                                                  | Description                                                                            |
 | -------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
 | `Type: Bug`          | [search](https://github.com/influxdb-rs/influxdb-rust/labels/Status%3A%20Type%20Bug)           | Applied to issues reporting bugs.                                                      |
-| `Type: Chore`        | [search](https://github.com/influxdb-rs/influxdb-rust/labels/Status%3A%20Type%20Chore)         | Applied to issues and pull requests regarding miscellaneous tasks around the reposity. |
+| `Type: Chore`        | [search](https://github.com/influxdb-rs/influxdb-rust/labels/Status%3A%20Type%20Chore)         | Applied to issues and pull requests regarding miscellaneous tasks around the repository. |
 | `Type: Enhancement`  | [search](https://github.com/influxdb-rs/influxdb-rust/labels/Status%3A%20Type%20Enhancement)   | Applied to issues and pull requests where an existing feature is improved.             |
 | `Type: Governance`   | [search](https://github.com/influxdb-rs/influxdb-rust/labels/Status%3A%20Type%20Governance)    | Applied to issues pull requests regarding repository governance.                       |
 | `Type: New Feature`  | [search](https://github.com/influxdb-rs/influxdb-rust/labels/status%3a%20Type%20New%20Feature) | Applied to issues and pull requests requesting or implementing new features.           |  |
diff --git a/README.j2 b/README.j2
index 489ca0c..be728de 100644
--- a/README.j2
+++ b/README.j2
@@ -25,14 +25,14 @@
     <a href="https://www.rust-lang.org/en-US/">
         <img src="https://img.shields.io/badge/Made%20with-Rust-orange.svg" alt='Build with Rust' />
     </a>
-    <a href="https://blog.rust-lang.org/2022/11/03/Rust-1.65.0.html">
-        <img src="https://img.shields.io/badge/rustc-1.65+-yellow.svg" alt='Minimum Rust Version: 1.65' />
+    <a href="https://blog.rust-lang.org/2022/11/03/Rust-1.67.0.html">
+        <img src="https://img.shields.io/badge/rustc-1.67+-yellow.svg" alt='Minimum Rust Version: 1.67' />
     </a>
 </p>
 
 {{readme}}
 
-@ 2020 Gero Gerke and [contributors].
+@ 2020-2024 Gero Gerke, msrd0 and [contributors].
 
  [contributors]: https://github.com/influxdb-rs/influxdb-rust/graphs/contributors
 {%- if links != "" %}
diff --git a/README.md b/README.md
index 73f4d7e..9865904 100644
--- a/README.md
+++ b/README.md
@@ -30,20 +30,18 @@
     </a>
 </p>
 
-This library is a work in progress. This means a feature you might need is not implemented yet or could be handled better.
-
 Pull requests are always welcome. See [Contributing][__link0] and [Code of Conduct][__link1]. For a list of past changes, see [CHANGELOG.md][__link2].
 
 
 ### Currently Supported Features
 
- - Reading and Writing to InfluxDB
- - Optional Serde Support for Deserialization
+ - Reading and writing to InfluxDB
+ - Optional Serde support for deserialization
  - Running multiple queries in one request (e.g. `SELECT * FROM weather_berlin; SELECT * FROM weather_london`)
  - Writing single or multiple measurements in one request (e.g. `WriteQuery` or `Vec<WriteQuery>` argument)
- - Authenticated and Unauthenticated Connections
+ - Authenticated and unauthenticated connections
  - `async`/`await` support
- - `#[derive(InfluxDbWriteable)]` Derive Macro for Writing / Reading into Structs
+ - `#[derive(InfluxDbWriteable)]` derive macro for writing / reading into structs
  - `GROUP BY` support
  - Tokio and async-std support (see example below) or [available backends][__link3]
  - Swappable HTTP backends ([see below](#Choice-of-HTTP-backend))
@@ -97,7 +95,7 @@ async fn main() -> Result<(), Error> {
 
     client.query(weather_readings).await?;
 
-    // Let's see if the data we wrote is there
+    // Read back all records
     let read_query = ReadQuery::new("SELECT * FROM weather");
 
     let read_result = client.query(read_query).await?;
@@ -106,7 +104,7 @@ async fn main() -> Result<(), Error> {
 }
 ```
 
-For further examples, check out the Integration Tests in `tests/integration_tests.rs` in the repository.
+For further examples, check out the integration tests in `tests/integration_tests.rs` in the repository.
 
 
 ## Choice of HTTP backend
@@ -121,37 +119,43 @@ To communicate with InfluxDB, you can choose the HTTP backend to be used configu
 	
  - **[hyper][__link7]** (through reqwest), with native TLS (OpenSSL)
 	```toml
-	influxdb = { version = "0.7.2", default-features = false,features = ["derive", "use-serde", "reqwest-client"] }
+	influxdb = { version = "0.7.2", default-features = false, features = ["derive", "serde", "reqwest-client-native-tls"] }
+	```
+	
+	
+ - **[hyper][__link8]** (through reqwest), with vendored native TLS (OpenSSL)
+	```toml
+	influxdb = { version = "0.7.2", default-features = false, features = ["derive", "serde", "reqwest-client-native-tls-vendored"] }
 	```
 	
 	
- - **[hyper][__link8]** (through surf), use this if you need tokio 0.2 compatibility
+ - **[hyper][__link9]** (through surf), use this if you need tokio 0.2 compatibility
 	```toml
-	influxdb = { version = "0.7.2", default-features = false,features = ["derive", "use-serde", "hyper-client"] }
+	influxdb = { version = "0.7.2", default-features = false, features = ["derive", "serde", "hyper-client"] }
 	```
 	
 	
- - **[curl][__link9]**, using [libcurl][__link10]
+ - **[curl][__link10]**, using [libcurl][__link11]
 	```toml
-	influxdb = { version = "0.7.2", default-features = false,features = ["derive", "use-serde", "curl-client"] }
+	influxdb = { version = "0.7.2", default-features = false, features = ["derive", "serde", "curl-client"] }
 	```
 	
 	
- - **[async-h1][__link11]** with native TLS (OpenSSL)
+ - **[async-h1][__link12]** with native TLS (OpenSSL)
 	```toml
-	influxdb = { version = "0.7.2", default-features = false,features = ["derive", "use-serde", "h1-client"] }
+	influxdb = { version = "0.7.2", default-features = false, features = ["derive", "serde", "h1-client"] }
 	```
 	
 	
- - **[async-h1][__link12]** with [rustls][__link13]
+ - **[async-h1][__link13]** with [rustls][__link14]
 	```toml
-	influxdb = { version = "0.7.2", default-features = false,features = ["derive", "use-serde", "h1-client-rustls"] }
+	influxdb = { version = "0.7.2", default-features = false, features = ["derive", "serde", "h1-client-rustls"] }
 	```
 	
 	
- - WebAssembly’s `window.fetch`, via `web-sys` and **[wasm-bindgen][__link14]**
+ - WebAssembly’s `window.fetch`, via `web-sys` and **[wasm-bindgen][__link15]**
 	```toml
-	influxdb = { version = "0.7.2", default-features = false,features = ["derive", "use-serde", "wasm-client"] }
+	influxdb = { version = "0.7.2", default-features = false, features = ["derive", "serde", "wasm-client"] }
 	```
 	
 	
@@ -159,23 +163,24 @@ To communicate with InfluxDB, you can choose the HTTP backend to be used configu
 
 ## License
 
-[![License: MIT][__link15]][__link16]
+[![License: MIT][__link16]][__link17]
 
 
 
-@ 2020 Gero Gerke and [contributors].
+@ 2020-2024 Gero Gerke, msrd0 and [contributors].
 
  [contributors]: https://github.com/influxdb-rs/influxdb-rust/graphs/contributors
- [__cargo_doc2readme_dependencies_info]: ggGkYW0BYXSEG_Yk-0hvrVPoG-pGw0Sym8kbG2s5Ga25QGRAG6zgaYax6AfsYXKEG5FQA0msUh34G1V6qHa_8CeQG66nRf4Jd7PiG99LD0P5Tiz5YWSBgmhpbmZsdXhkYmUwLjcuMg
+ [__cargo_doc2readme_dependencies_info]: ggGkYW0BYXSEG_RDmlyxxvyrG0rwcLBKoYdvG5It9hbWNgjUGzjD8iBYfsFFYXKEG1LaAVLASZMqG5J2qfpyCvbMG_Rohh5BobOmG0DqLv5454SZYWSBgmhpbmZsdXhkYmUwLjcuMg
  [__link0]: https://github.com/influxdb-rs/influxdb-rust/blob/main/CONTRIBUTING.md
  [__link1]: https://github.com/influxdb-rs/influxdb-rust/blob/main/CODE_OF_CONDUCT.md
- [__link10]: https://curl.se/libcurl/
- [__link11]: https://github.com/http-rs/async-h1
+ [__link10]: https://github.com/alexcrichton/curl-rust
+ [__link11]: https://curl.se/libcurl/
  [__link12]: https://github.com/http-rs/async-h1
- [__link13]: https://github.com/ctz/rustls
- [__link14]: https://github.com/rustwasm/wasm-bindgen
- [__link15]: https://img.shields.io/badge/License-MIT-yellow.svg
- [__link16]: https://opensource.org/licenses/MIT
+ [__link13]: https://github.com/http-rs/async-h1
+ [__link14]: https://github.com/ctz/rustls
+ [__link15]: https://github.com/rustwasm/wasm-bindgen
+ [__link16]: https://img.shields.io/badge/License-MIT-yellow.svg
+ [__link17]: https://opensource.org/licenses/MIT
  [__link2]: https://github.com/influxdb-rs/influxdb-rust/blob/main/CHANGELOG.md
  [__link3]: https://github.com/influxdb-rs/influxdb-rust/blob/main/influxdb/Cargo.toml
  [__link4]: https://docs.rs/influxdb/0.7.2/influxdb/?search=integrations::serde_integration
@@ -183,5 +188,5 @@ To communicate with InfluxDB, you can choose the HTTP backend to be used configu
  [__link6]: https://github.com/ctz/rustls
  [__link7]: https://github.com/hyperium/hyper
  [__link8]: https://github.com/hyperium/hyper
- [__link9]: https://github.com/alexcrichton/curl-rust
+ [__link9]: https://github.com/hyperium/hyper
 
diff --git a/RELEASING.md b/RELEASING.md
index 85e81a3..7f18385 100644
--- a/RELEASING.md
+++ b/RELEASING.md
@@ -1,11 +1,11 @@
 # How to release this crate
 
-This project consists of two crates which need to be published to crates.io in the correct order. Additonally, there's some steps one's likely to miss when releasing.
+This project consists of two crates which need to be published to crates.io in the correct order. Additionally, there's some steps one's likely to miss when releasing.
 
 ## Pre-Release-Checklist
 
 - [ ] `influxdb/Cargo.toml` and `influxdb-derive/Cargo.toml`: Bumped `influxdb` and `influxdb-derive` versions to new version number?
-- [ ] `influxdb/Cargo.toml`: Changed `influxdb` dependecy on `influxdb-derive` to new version number?
+- [ ] `influxdb/Cargo.toml`: Changed `influxdb` dependency on `influxdb-derive` to new version number?
 - [ ] `CHANGELOG.md`: Remove all entries from the unreleased section
 - [ ] `CHANGELOG.md`: Add new Section for the new version number with subsections `Added`, `Changed` and `Fixed`.
 - [ ] `CHANGELOG.md`: For each commit since the last release commit `Release vX.Y.Z`, added a changelog entry in the correct section linking to the author and PR in this format?
diff --git a/docker-compose.integrationtest.yaml b/docker-compose.integrationtest.yaml
new file mode 100644
index 0000000..1fd549d
--- /dev/null
+++ b/docker-compose.integrationtest.yaml
@@ -0,0 +1,27 @@
+version: '3'
+services:
+  influxdb:
+      image: influxdb:1.8
+      ports:
+        - 8086:8086
+  authed_influxdb:
+    image: influxdb:1.8
+    ports:
+      - 9086:8086
+    environment:
+      INFLUXDB_HTTP_AUTH_ENABLED: true
+      INFLUXDB_ADMIN_USER: admin
+      INFLUXDB_ADMIN_PASSWORD: password
+      INFLUXDB_USER: nopriv_user
+      INFLUXDB_USER_PASSWORD: password
+  influxdbv2:
+    image: influxdb:2.6
+    ports:
+      - 2086:8086
+    environment:
+      DOCKER_INFLUXDB_INIT_MODE: setup
+      DOCKER_INFLUXDB_INIT_USERNAME: admin
+      DOCKER_INFLUXDB_INIT_PASSWORD: password
+      DOCKER_INFLUXDB_INIT_ORG: testing
+      DOCKER_INFLUXDB_INIT_BUCKET: mydb
+      DOCKER_INFLUXDB_INIT_ADMIN_TOKEN: admintoken
diff --git a/influxdb/Cargo.toml b/influxdb/Cargo.toml
index 4f58811..c31729a 100644
--- a/influxdb/Cargo.toml
+++ b/influxdb/Cargo.toml
@@ -11,32 +11,34 @@ license = "MIT"
 readme = "README.md"
 include = ["src/**/*", "tests/**/*", "Cargo.toml", "LICENSE"]
 repository = "https://github.com/influxdb-rs/influxdb-rust"
+rust-version = "1.70"
 
 [dependencies]
 chrono = { version = "0.4.23", features = ["serde"], default-features = false }
 futures-util = "0.3.17"
 http = "0.2.4"
 influxdb_derive = { version = "0.5.1", optional = true }
-lazy_static = "1.4.0"
-regex = "1.3.5"
+lazy-regex = "3.1"
 reqwest = { version = "0.11.4", default-features = false, optional = true }
 surf = { version = "2.2.0", default-features = false, optional = true }
-serde = { version = "1.0.104", features = ["derive"], optional = true }
+serde = { version = "1.0.186", optional = true }
+serde_derive = { version = "1.0.186", optional = true }
 serde_json = { version = "1.0.48", optional = true }
 thiserror = "1.0"
 
 [features]
-default = ["use-serde", "reqwest-client-rustls"]
-derive = ["influxdb_derive"]
-use-serde = ["serde", "serde_json"]
+default = ["serde", "reqwest-client-rustls"]
+derive = ["dep:influxdb_derive"]
+serde = ["dep:serde", "dep:serde_derive", "dep:serde_json"]
 
 # http clients
 curl-client = ["surf", "surf/curl-client"]
 h1-client = ["surf", "surf/h1-client"]
 h1-client-rustls = ["surf", "surf/h1-client-rustls"]
 hyper-client = ["surf", "surf/hyper-client"]
-reqwest-client = ["reqwest", "reqwest/native-tls-alpn"]
 reqwest-client-rustls = ["reqwest", "reqwest/rustls-tls-webpki-roots"]
+reqwest-client-native-tls = ["reqwest", "reqwest/native-tls-alpn"]
+reqwest-client-native-tls-vendored = ["reqwest", "reqwest/native-tls-vendored"]
 wasm-client = ["surf", "surf/wasm-client"]
 
 [dev-dependencies]
diff --git a/influxdb/src/client/mod.rs b/influxdb/src/client/mod.rs
index ad198bc..264cfde 100644
--- a/influxdb/src/client/mod.rs
+++ b/influxdb/src/client/mod.rs
@@ -16,7 +16,6 @@
 //! ```
 
 use futures_util::TryFutureExt;
-use http::StatusCode;
 #[cfg(feature = "reqwest")]
 use reqwest::{Client as HttpClient, RequestBuilder, Response as HttpResponse};
 use std::collections::{BTreeMap, HashMap};
@@ -281,7 +280,7 @@ impl Client {
         })?;
 
         // todo: improve error parsing without serde
-        if s.contains("\"error\"") {
+        if s.contains("\"error\"") || s.contains("\"Error\"") {
             return Err(Error::DatabaseError {
                 error: format!("influxdb error: \"{}\"", s),
             });
@@ -301,13 +300,10 @@ impl Client {
 
 pub(crate) fn check_status(res: &HttpResponse) -> Result<(), Error> {
     let status = res.status();
-    if status == StatusCode::UNAUTHORIZED.as_u16() {
-        Err(Error::AuthorizationError)
-    } else if status == StatusCode::FORBIDDEN.as_u16() {
-        Err(Error::AuthenticationError)
-    } else {
-        Ok(())
+    if !status.is_success() {
+        return Err(Error::ApiError(status.into()));
     }
+    Ok(())
 }
 
 #[cfg(test)]
diff --git a/influxdb/src/error.rs b/influxdb/src/error.rs
index b2f651b..5f89e8f 100644
--- a/influxdb/src/error.rs
+++ b/influxdb/src/error.rs
@@ -3,6 +3,7 @@
 use thiserror::Error;
 
 #[derive(Debug, Eq, PartialEq, Error)]
+#[non_exhaustive]
 pub enum Error {
     #[error("query is invalid: {error}")]
     /// Error happens when a query is invalid
@@ -24,13 +25,9 @@ pub enum Error {
     /// Error which has happened inside InfluxDB
     DatabaseError { error: String },
 
-    #[error("authentication error. No or incorrect credentials")]
-    /// Error happens when no or incorrect credentials are used. `HTTP 401 Unauthorized`
-    AuthenticationError,
-
-    #[error("authorization error. User not authorized")]
-    /// Error happens when the supplied user is not authorized. `HTTP 403 Forbidden`
-    AuthorizationError,
+    #[error("API error with a status code: {0}")]
+    /// Error happens when API returns non 2xx status code.
+    ApiError(u16),
 
     #[error("connection error: {error}")]
     /// Error happens when HTTP request fails
diff --git a/influxdb/src/integrations/serde_integration/de.rs b/influxdb/src/integrations/serde_integration/de.rs
index 82eb607..a3e904d 100644
--- a/influxdb/src/integrations/serde_integration/de.rs
+++ b/influxdb/src/integrations/serde_integration/de.rs
@@ -1,8 +1,9 @@
 use super::{Series, TaggedSeries};
 use serde::de::{
-    value, DeserializeSeed, Deserializer, Error, IntoDeserializer, MapAccess, SeqAccess, Visitor,
+    value, Deserialize, DeserializeSeed, Deserializer, Error, IntoDeserializer, MapAccess,
+    SeqAccess, Visitor,
 };
-use serde::Deserialize;
+use serde_derive::Deserialize;
 use std::fmt;
 use std::marker::PhantomData;
 
@@ -416,7 +417,7 @@ mod tests {
 
     #[test]
     fn test_deserialize_borrowed() {
-        use serde::Deserialize;
+        use serde_derive::Deserialize;
 
         // Deserializing a string that cannot be passed through
         // without escaping will result in an error like this:
diff --git a/influxdb/src/integrations/serde_integration/mod.rs b/influxdb/src/integrations/serde_integration/mod.rs
index 974853e..75b678b 100644
--- a/influxdb/src/integrations/serde_integration/mod.rs
+++ b/influxdb/src/integrations/serde_integration/mod.rs
@@ -8,7 +8,7 @@
 //!
 //! ```rust,no_run
 //! use influxdb::{Client, Query};
-//! use serde::Deserialize;
+//! use serde_derive::Deserialize;
 //!
 //! #[derive(Deserialize)]
 //! struct WeatherWithoutCityName {
@@ -47,7 +47,8 @@
 
 mod de;
 
-use serde::{de::DeserializeOwned, Deserialize};
+use serde::de::DeserializeOwned;
+use serde_derive::Deserialize;
 
 use crate::{client::check_status, Client, Error, Query, ReadQuery};
 
diff --git a/influxdb/src/lib.rs b/influxdb/src/lib.rs
index b12ebc6..d062e25 100644
--- a/influxdb/src/lib.rs
+++ b/influxdb/src/lib.rs
@@ -1,17 +1,14 @@
-//! This library is a work in progress. This means a feature you might need is not implemented
-//! yet or could be handled better.
-//!
 //! Pull requests are always welcome. See [Contributing](https://github.com/influxdb-rs/influxdb-rust/blob/main/CONTRIBUTING.md) and [Code of Conduct](https://github.com/influxdb-rs/influxdb-rust/blob/main/CODE_OF_CONDUCT.md). For a list of past changes, see [CHANGELOG.md](https://github.com/influxdb-rs/influxdb-rust/blob/main/CHANGELOG.md).
 //!
 //! ## Currently Supported Features
 //!
-//! -   Reading and Writing to InfluxDB
-//! -   Optional Serde Support for Deserialization
+//! -   Reading and writing to InfluxDB
+//! -   Optional Serde support for deserialization
 //! -   Running multiple queries in one request (e.g. `SELECT * FROM weather_berlin; SELECT * FROM weather_london`)
 //! -   Writing single or multiple measurements in one request (e.g. `WriteQuery` or `Vec<WriteQuery>` argument)
-//! -   Authenticated and Unauthenticated Connections
+//! -   Authenticated and unauthenticated connections
 //! -   `async`/`await` support
-//! -   `#[derive(InfluxDbWriteable)]` Derive Macro for Writing / Reading into Structs
+//! -   `#[derive(InfluxDbWriteable)]` derive macro for writing / reading into structs
 //! -   `GROUP BY` support
 //! -   Tokio and async-std support (see example below) or [available backends](https://github.com/influxdb-rs/influxdb-rust/blob/main/influxdb/Cargo.toml)
 //! -   Swappable HTTP backends ([see below](#Choice-of-HTTP-backend))
@@ -60,7 +57,7 @@
 //!
 //!     client.query(weather_readings).await?;
 //!
-//!     // Let's see if the data we wrote is there
+//!     // Read back all records
 //!     let read_query = ReadQuery::new("SELECT * FROM weather");
 //!
 //!     let read_result = client.query(read_query).await?;
@@ -69,7 +66,7 @@
 //! }
 //! ```
 //!
-//! For further examples, check out the Integration Tests in `tests/integration_tests.rs`
+//! For further examples, check out the integration tests in `tests/integration_tests.rs`
 //! in the repository.
 //!
 //! # Choice of HTTP backend
@@ -79,17 +76,19 @@
 //! - **[hyper](https://github.com/hyperium/hyper)** (through reqwest, used by default), with [rustls](https://github.com/ctz/rustls)
 #![doc = cargo_toml!(indent="\t", "derive")]
 //! - **[hyper](https://github.com/hyperium/hyper)** (through reqwest), with native TLS (OpenSSL)
-#![doc = cargo_toml!(indent="\t", default-features = false, "derive", "use-serde", "reqwest-client")]
+#![doc = cargo_toml!(indent="\t", default-features = false, "derive", "serde", "reqwest-client-native-tls")]
+//! - **[hyper](https://github.com/hyperium/hyper)** (through reqwest), with vendored native TLS (OpenSSL)
+#![doc = cargo_toml!(indent="\t", default-features = false, "derive", "serde", "reqwest-client-native-tls-vendored")]
 //! - **[hyper](https://github.com/hyperium/hyper)** (through surf), use this if you need tokio 0.2 compatibility
-#![doc = cargo_toml!(indent="\t", default-features = false, "derive", "use-serde", "hyper-client")]
+#![doc = cargo_toml!(indent="\t", default-features = false, "derive", "serde", "hyper-client")]
 //! - **[curl](https://github.com/alexcrichton/curl-rust)**, using [libcurl](https://curl.se/libcurl/)
-#![doc = cargo_toml!(indent="\t", default-features = false, "derive", "use-serde", "curl-client")]
+#![doc = cargo_toml!(indent="\t", default-features = false, "derive", "serde", "curl-client")]
 //! - **[async-h1](https://github.com/http-rs/async-h1)** with native TLS (OpenSSL)
-#![doc = cargo_toml!(indent="\t", default-features = false, "derive", "use-serde", "h1-client")]
+#![doc = cargo_toml!(indent="\t", default-features = false, "derive", "serde", "h1-client")]
 //! - **[async-h1](https://github.com/http-rs/async-h1)** with [rustls](https://github.com/ctz/rustls)
-#![doc = cargo_toml!(indent="\t", default-features = false, "derive", "use-serde", "h1-client-rustls")]
+#![doc = cargo_toml!(indent="\t", default-features = false, "derive", "serde", "h1-client-rustls")]
 //! - WebAssembly's `window.fetch`, via `web-sys` and **[wasm-bindgen](https://github.com/rustwasm/wasm-bindgen)**
-#![doc = cargo_toml!(indent="\t", default-features = false, "derive", "use-serde", "wasm-client")]
+#![doc = cargo_toml!(indent="\t", default-features = false, "derive", "serde", "wasm-client")]
 //!
 //! # License
 //!
@@ -105,7 +104,7 @@ macro_rules! cargo_toml {
     };
 
     (indent=$indent:literal, default-features = false, $firstfeat:literal $(, $feature:literal)*) => {
-        cargo_toml_private!($indent, "default-features = false,", $firstfeat $(, $feature)*)
+        cargo_toml_private!($indent, "default-features = false, ", $firstfeat $(, $feature)*)
     };
 }
 
@@ -149,8 +148,8 @@ pub use query::{
     InfluxDbWriteable, Query, QueryType, Timestamp, ValidQuery,
 };
 
-#[cfg(feature = "use-serde")]
+#[cfg(feature = "serde")]
 pub mod integrations {
-    #[cfg(feature = "use-serde")]
+    #[cfg(feature = "serde")]
     pub mod serde_integration;
 }
diff --git a/influxdb/src/query/line_proto_term.rs b/influxdb/src/query/line_proto_term.rs
index 77d159c..d803c75 100644
--- a/influxdb/src/query/line_proto_term.rs
+++ b/influxdb/src/query/line_proto_term.rs
@@ -1,15 +1,12 @@
 /// InfluxDB Line Protocol escaping helper module.
 /// https://docs.influxdata.com/influxdb/v1.7/write_protocols/line_protocol_tutorial/
 use crate::Type;
-use lazy_static::lazy_static;
-use regex::Regex;
-
-lazy_static! {
-    pub static ref COMMAS_SPACES: Regex = Regex::new("[, ]").unwrap();
-    pub static ref COMMAS_SPACES_EQUALS: Regex = Regex::new("[, =]").unwrap();
-    pub static ref QUOTES_SLASHES: Regex = Regex::new(r#"["\\]"#).unwrap();
-    pub static ref SLASHES: Regex = Regex::new(r#"(\\|,| |=|")"#).unwrap();
-}
+use lazy_regex::{lazy_regex, Lazy, Regex};
+
+pub static COMMAS_SPACES: Lazy<Regex> = lazy_regex!("[, ]");
+pub static COMMAS_SPACES_EQUALS: Lazy<Regex> = lazy_regex!("[, =]");
+pub static QUOTES_SLASHES: Lazy<Regex> = lazy_regex!(r#"["\\]"#);
+pub static SLASHES: Lazy<Regex> = lazy_regex!(r#"(\\|,| |=|")"#);
 
 pub enum LineProtoTerm<'a> {
     Measurement(&'a str), // escape commas, spaces
diff --git a/influxdb/tests/derive_integration_tests.rs b/influxdb/tests/derive_integration_tests.rs
index 7167aa6..1601ce7 100644
--- a/influxdb/tests/derive_integration_tests.rs
+++ b/influxdb/tests/derive_integration_tests.rs
@@ -7,8 +7,8 @@ use influxdb::InfluxDbWriteable;
 use chrono::{DateTime, Utc};
 use influxdb::{Query, ReadQuery, Timestamp};
 
-#[cfg(feature = "use-serde")]
-use serde::Deserialize;
+#[cfg(feature = "serde")]
+use serde_derive::Deserialize;
 
 use utilities::{assert_result_ok, create_client, create_db, delete_db, run_test};
 
@@ -24,7 +24,7 @@ struct WeatherReading {
 }
 
 #[derive(Debug)]
-#[cfg_attr(feature = "use-serde", derive(Deserialize))]
+#[cfg_attr(feature = "serde", derive(Deserialize))]
 struct WeatherReadingWithoutIgnored {
     time: DateTime<Utc>,
     pressure: i32,
@@ -81,7 +81,7 @@ async fn test_derive_simple_write() {
 ///
 /// This integration tests that writing data and retrieving the data again is working
 #[cfg(feature = "derive")]
-#[cfg(feature = "use-serde")]
+#[cfg(feature = "serde")]
 #[async_std::test]
 #[cfg(not(tarpaulin_include))]
 async fn test_write_and_read_option() {
diff --git a/influxdb/tests/integration_tests.rs b/influxdb/tests/integration_tests.rs
index e3750cc..01b9fdf 100644
--- a/influxdb/tests/integration_tests.rs
+++ b/influxdb/tests/integration_tests.rs
@@ -3,7 +3,7 @@ extern crate influxdb;
 #[path = "./utilities.rs"]
 mod utilities;
 
-use serde::Deserialize;
+use serde_derive::Deserialize;
 use utilities::{
     assert_result_err, assert_result_ok, create_client, create_db, delete_db, run_test,
 };
@@ -120,6 +120,8 @@ async fn test_authed_write_and_read() {
 #[async_std::test]
 #[cfg(not(tarpaulin_include))]
 async fn test_wrong_authed_write_and_read() {
+    use http::StatusCode;
+
     const TEST_NAME: &str = "test_wrong_authed_write_and_read";
 
     run_test(
@@ -140,9 +142,9 @@ async fn test_wrong_authed_write_and_read() {
             let write_result = client.query(write_query).await;
             assert_result_err(&write_result);
             match write_result {
-                Err(Error::AuthorizationError) => {}
+                Err(Error::ApiError(code)) if code == StatusCode::UNAUTHORIZED.as_u16() => {}
                 _ => panic!(
-                    "Should be an AuthorizationError: {}",
+                    "Should be an ApiError(UNAUTHORIZED): {}",
                     write_result.unwrap_err()
                 ),
             }
@@ -151,9 +153,9 @@ async fn test_wrong_authed_write_and_read() {
             let read_result = client.query(read_query).await;
             assert_result_err(&read_result);
             match read_result {
-                Err(Error::AuthorizationError) => {}
+                Err(Error::ApiError(code)) if code == StatusCode::UNAUTHORIZED.as_u16() => {}
                 _ => panic!(
-                    "Should be an AuthorizationError: {}",
+                    "Should be an ApiError(UNAUTHORIZED): {}",
                     read_result.unwrap_err()
                 ),
             }
@@ -164,9 +166,9 @@ async fn test_wrong_authed_write_and_read() {
             let read_result = client.query(read_query).await;
             assert_result_err(&read_result);
             match read_result {
-                Err(Error::AuthenticationError) => {}
+                Err(Error::ApiError(code)) if code == StatusCode::FORBIDDEN.as_u16() => {}
                 _ => panic!(
-                    "Should be an AuthenticationError: {}",
+                    "Should be an ApiError(UNAUTHENTICATED): {}",
                     read_result.unwrap_err()
                 ),
             }
@@ -190,6 +192,8 @@ async fn test_wrong_authed_write_and_read() {
 #[async_std::test]
 #[cfg(not(tarpaulin_include))]
 async fn test_non_authed_write_and_read() {
+    use http::StatusCode;
+
     const TEST_NAME: &str = "test_non_authed_write_and_read";
 
     run_test(
@@ -208,9 +212,9 @@ async fn test_non_authed_write_and_read() {
             let write_result = non_authed_client.query(write_query).await;
             assert_result_err(&write_result);
             match write_result {
-                Err(Error::AuthorizationError) => {}
+                Err(Error::ApiError(code)) if code == StatusCode::UNAUTHORIZED.as_u16() => {}
                 _ => panic!(
-                    "Should be an AuthorizationError: {}",
+                    "Should be an ApiError(UNAUTHORIZED): {}",
                     write_result.unwrap_err()
                 ),
             }
@@ -220,9 +224,9 @@ async fn test_non_authed_write_and_read() {
 
             assert_result_err(&read_result);
             match read_result {
-                Err(Error::AuthorizationError) => {}
+                Err(Error::ApiError(code)) if code == StatusCode::UNAUTHORIZED.as_u16() => {}
                 _ => panic!(
-                    "Should be an AuthorizationError: {}",
+                    "Should be an ApiError(UNAUTHORIZED): {}",
                     read_result.unwrap_err()
                 ),
             }
@@ -277,9 +281,11 @@ async fn test_write_and_read_field() {
 ///
 /// This test case tests the authentication on json reads
 #[async_std::test]
-#[cfg(feature = "use-serde")]
+#[cfg(feature = "serde")]
 #[cfg(not(tarpaulin_include))]
 async fn test_json_non_authed_read() {
+    use http::StatusCode;
+
     const TEST_NAME: &str = "test_json_non_authed_read";
 
     run_test(
@@ -297,9 +303,9 @@ async fn test_json_non_authed_read() {
             let read_result = non_authed_client.json_query(read_query).await;
             assert_result_err(&read_result);
             match read_result {
-                Err(Error::AuthorizationError) => {}
+                Err(Error::ApiError(code)) if code == StatusCode::UNAUTHORIZED.as_u16() => {}
                 _ => panic!(
-                    "Should be a AuthorizationError: {}",
+                    "Should be an ApiError(UNAUTHORIZED): {}",
                     read_result.unwrap_err()
                 ),
             }
@@ -322,7 +328,7 @@ async fn test_json_non_authed_read() {
 ///
 /// This test case tests the authentication on json reads
 #[async_std::test]
-#[cfg(feature = "use-serde")]
+#[cfg(feature = "serde")]
 #[cfg(not(tarpaulin_include))]
 async fn test_json_authed_read() {
     const TEST_NAME: &str = "test_json_authed_read";
@@ -359,11 +365,9 @@ async fn test_json_authed_read() {
 ///
 /// This integration tests that writing data and retrieving the data again is working
 #[async_std::test]
-#[cfg(feature = "use-serde")]
+#[cfg(feature = "serde")]
 #[cfg(not(tarpaulin_include))]
 async fn test_write_and_read_option() {
-    use serde::Deserialize;
-
     const TEST_NAME: &str = "test_write_and_read_option";
 
     run_test(
@@ -420,11 +424,9 @@ async fn test_write_and_read_option() {
 /// This test case tests whether JSON can be decoded from a InfluxDB response and whether that JSON
 /// is equal to the data which was written to the database
 #[async_std::test]
-#[cfg(feature = "use-serde")]
+#[cfg(feature = "serde")]
 #[cfg(not(tarpaulin_include))]
 async fn test_json_query() {
-    use serde::Deserialize;
-
     const TEST_NAME: &str = "test_json_query";
 
     run_test(
@@ -472,11 +474,9 @@ async fn test_json_query() {
 /// This test case tests whether the response to a GROUP BY can be parsed by
 /// deserialize_next_tagged into a tags struct
 #[async_std::test]
-#[cfg(feature = "use-serde")]
+#[cfg(feature = "serde")]
 #[cfg(not(tarpaulin_include))]
 async fn test_json_query_tagged() {
-    use serde::Deserialize;
-
     const TEST_NAME: &str = "test_json_query_tagged";
 
     run_test(
@@ -533,17 +533,15 @@ async fn test_json_query_tagged() {
 
 /// INTEGRATION TEST
 ///
-/// This test case tests whether JSON can be decoded from a InfluxDB response and wether that JSON
+/// This test case tests whether JSON can be decoded from a InfluxDB response and whether that JSON
 /// is equal to the data which was written to the database
 /// (tested with tokio)
 #[tokio::test]
 #[cfg(all(
-    feature = "use-serde",
+    feature = "serde",
     not(any(tarpaulin_include, feature = "hyper-client"))
 ))]
 async fn test_json_query_vec() {
-    use serde::Deserialize;
-
     const TEST_NAME: &str = "test_json_query_vec";
 
     run_test(
@@ -590,11 +588,9 @@ async fn test_json_query_vec() {
 ///
 /// This integration test tests whether using the wrong query method fails building the query
 #[async_std::test]
-#[cfg(feature = "use-serde")]
+#[cfg(feature = "serde")]
 #[cfg(not(tarpaulin_include))]
 async fn test_serde_multi_query() {
-    use serde::Deserialize;
-
     const TEST_NAME: &str = "test_serde_multi_query";
 
     run_test(
@@ -666,7 +662,7 @@ async fn test_serde_multi_query() {
 ///
 /// This integration test tests whether using the wrong query method fails building the query
 #[async_std::test]
-#[cfg(feature = "use-serde")]
+#[cfg(feature = "serde")]
 #[cfg(not(tarpaulin_include))]
 async fn test_wrong_query_errors() {
     let client = create_client("test_name");
diff --git a/influxdb/tests/integration_tests_v2.rs b/influxdb/tests/integration_tests_v2.rs
index 74e17a7..8c47e2a 100644
--- a/influxdb/tests/integration_tests_v2.rs
+++ b/influxdb/tests/integration_tests_v2.rs
@@ -33,7 +33,7 @@ async fn test_authed_write_and_read() {
         },
         || async move {
             let client = Client::new("http://127.0.0.1:2086", "mydb").with_token("admintoken");
-            let read_query = ReadQuery::new("DELETE MEASUREMENT weather");
+            let read_query = ReadQuery::new("DROP MEASUREMENT \"weather\"");
             let read_result = client.query(read_query).await;
             assert_result_ok(&read_result);
             assert!(!read_result.unwrap().contains("error"), "Teardown failed");
@@ -48,6 +48,8 @@ async fn test_authed_write_and_read() {
 #[async_std::test]
 #[cfg(not(tarpaulin))]
 async fn test_wrong_authed_write_and_read() {
+    use http::StatusCode;
+
     run_test(
         || async move {
             let client = Client::new("http://127.0.0.1:2086", "mydb").with_token("falsetoken");
@@ -57,9 +59,9 @@ async fn test_wrong_authed_write_and_read() {
             let write_result = client.query(&write_query).await;
             assert_result_err(&write_result);
             match write_result {
-                Err(Error::AuthorizationError) => {}
+                Err(Error::ApiError(code)) if code == StatusCode::UNAUTHORIZED.as_u16() => {}
                 _ => panic!(
-                    "Should be an AuthorizationError: {}",
+                    "Should be an ApiError(UNAUTHORIZED): {}",
                     write_result.unwrap_err()
                 ),
             }
@@ -68,9 +70,9 @@ async fn test_wrong_authed_write_and_read() {
             let read_result = client.query(&read_query).await;
             assert_result_err(&read_result);
             match read_result {
-                Err(Error::AuthorizationError) => {}
+                Err(Error::ApiError(code)) if code == StatusCode::UNAUTHORIZED.as_u16() => {}
                 _ => panic!(
-                    "Should be an AuthorizationError: {}",
+                    "Should be an ApiError(UNAUTHORIZED): {}",
                     read_result.unwrap_err()
                 ),
             }
@@ -86,6 +88,8 @@ async fn test_wrong_authed_write_and_read() {
 #[async_std::test]
 #[cfg(not(tarpaulin))]
 async fn test_non_authed_write_and_read() {
+    use http::StatusCode;
+
     run_test(
         || async move {
             let non_authed_client = Client::new("http://127.0.0.1:2086", "mydb");
@@ -95,9 +99,9 @@ async fn test_non_authed_write_and_read() {
             let write_result = non_authed_client.query(&write_query).await;
             assert_result_err(&write_result);
             match write_result {
-                Err(Error::AuthorizationError) => {}
+                Err(Error::ApiError(code)) if code == StatusCode::UNAUTHORIZED.as_u16() => {}
                 _ => panic!(
-                    "Should be an AuthorizationError: {}",
+                    "Should be an ApiError(UNAUTHORIZED): {}",
                     write_result.unwrap_err()
                 ),
             }
@@ -106,9 +110,9 @@ async fn test_non_authed_write_and_read() {
             let read_result = non_authed_client.query(&read_query).await;
             assert_result_err(&read_result);
             match read_result {
-                Err(Error::AuthorizationError) => {}
+                Err(Error::ApiError(code)) if code == StatusCode::UNAUTHORIZED.as_u16() => {}
                 _ => panic!(
-                    "Should be an AuthorizationError: {}",
+                    "Should be an ApiError(UNAUTHORIZED): {}",
                     read_result.unwrap_err()
                 ),
             }
diff --git a/influxdb_derive/Cargo.toml b/influxdb_derive/Cargo.toml
index f219d29..6e4b377 100644
--- a/influxdb_derive/Cargo.toml
+++ b/influxdb_derive/Cargo.toml
@@ -11,6 +11,7 @@ license = "MIT"
 readme = "README.md"
 include = ["src/**/*", "tests/**/*", "Cargo.toml", "LICENSE"]
 repository = "https://github.com/influxdb-rs/influxdb-rust"
+rust-version = "1.70"
 
 [lib]
 proc-macro = true
