influxdb2 0.5.2

Influxdb 2 client library for rust
Documentation
use std::env;

use chrono::{DateTime, FixedOffset, TimeZone, Utc};
use futures::stream;
use influxdb2::models::DataPoint;
use influxdb2::models::Query;
use influxdb2::{Client, FromDataPoint};

#[derive(Debug, FromDataPoint)]
pub struct StockPrice {
    ticker: String,
    value: f64,
    open: f64,
    time: DateTime<FixedOffset>,
}

impl Default for StockPrice {
    fn default() -> Self {
        let now = Utc::now().naive_utc();
        Self {
            ticker: "".to_owned(),
            value: 0.0,
            open: 0.0,
            time: FixedOffset::east(7 * 3600).from_utc_datetime(&now),
        }
    }
}

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let host = env::var("INFLUXDB_HOST").unwrap();
    let org = env::var("INFLUXDB_ORG").unwrap();
    let token = env::var("INFLUXDB_TOKEN").unwrap();
    let bucket = env::var("INFLUXDB_BUCKET").unwrap();

    let client = Client::new(host, org, token);

    println!("HealthCheck: {:#?}", client.health().await?);

    let points: Vec<DataPoint> = vec![
        DataPoint::builder("bar")
            .tag("ticker", "AAPL")
            .field("value", 123.46)
            .field("open", 200.0)
            .build()?,
        DataPoint::builder("bar")
            .tag("ticker", "GOOG")
            .field("value", 321.09)
            .field("open", 309.2)
            .build()?,
    ];
    client.write(&bucket, stream::iter(points)).await?;
    let qs = format!(
        "
            from(bucket: \"{}\")
                |> range(start: -1w)
        ",
        bucket,
    );
    let query = Query::new(qs.to_string());

    println!(
        "Query result was: {:#?}",
        client.query::<StockPrice>(Some(query)).await?
    );

    Ok(())
}