1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
//! 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
//! - 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
//! - `async`/`await` support
//! - `#[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))
//!
//! # Quickstart
//!
//! Add the following to your `Cargo.toml`
//!
//! For an example with using Serde deserialization, please refer to [serde_integration](crate::integrations::serde_integration)
//!
//! ```rust,no_run
//! use chrono::{DateTime, Utc};
//! use influxdb::{Client, Error, InfluxDbWriteable, ReadQuery, Timestamp};
//!
//! #[tokio::main]
//! async fn main() -> Result<(), Error> {
//! // Connect to db `test` on `http://localhost:8086`
//! let client = Client::new("http://localhost:8086", "test");
//!
//! #[derive(InfluxDbWriteable)]
//! struct WeatherReading {
//! time: DateTime<Utc>,
//! humidity: i32,
//! #[influxdb(tag)]
//! wind_direction: String,
//! }
//!
//! // Let's write some data into a measurement called `weather`
//! let weather_readings = vec![
//! WeatherReading {
//! time: Timestamp::Hours(1).try_into().unwrap(),
//! humidity: 30,
//! wind_direction: String::from("north"),
//! }
//! .try_into_query("weather")
//! .unwrap(),
//! WeatherReading {
//! time: Timestamp::Hours(2).try_into().unwrap(),
//! humidity: 40,
//! wind_direction: String::from("west"),
//! }
//! .try_into_query("weather")
//! .unwrap(),
//! ];
//!
//! client.query(weather_readings).await?;
//!
//! // Read back all records
//! let read_query = ReadQuery::new("SELECT * FROM weather");
//!
//! let read_result = client.query(read_query).await?;
//! println!("{}", read_result);
//! Ok(())
//! }
//! ```
//!
//! For further examples, check out the integration tests in `tests/integration_tests.rs`
//! in the repository.
//!
//! # Choice of HTTP backend
//!
//! To communicate with InfluxDB, you can choose the HTTP backend to be used configuring the appropriate feature. We recommend sticking with the default reqwest-based client, unless you really need async-std compatibility.
//!
//! - **[hyper](https://github.com/hyperium/hyper)** (through reqwest, used by default), with [rustls](https://github.com/ctz/rustls)
//! - **[hyper](https://github.com/hyperium/hyper)** (through reqwest), with native TLS (OpenSSL)
//! - **[hyper](https://github.com/hyperium/hyper)** (through reqwest), with vendored native TLS (OpenSSL)
//!
//! # License
//!
//! [](https://opensource.org/licenses/MIT)
use cargo_toml;
use cargo_toml_private;
pub use Client;
pub use Error;
pub use ReadQuery;
pub use ;
pub use ;