[−][src]Module influxdb::integrations::serde_integration
Serde Integration for InfluxDB. Provides deserialization of query returns.
When querying multiple series in the same query (e.g. with a regex query), it might be desirable to flat map
the resulting series into a single Vec
like so. The example assumes, that there are weather readings in multiple
series named weather_<city_name>
(e.g. weather_berlin
, or weather_london
). Since we're using a Regex query,
we don't actually know which series will be returned. To assign the city name to the series, we can use the series
name
, InfluxDB provides alongside query results.
use futures::prelude::*; use influxdb::{Client, Query}; use serde::Deserialize; #[derive(Deserialize)] struct WeatherWithoutCityName { temperature: i32, } #[derive(Deserialize)] struct Weather { city_name: String, weather: WeatherWithoutCityName, } let client = Client::new("http://localhost:8086", "test"); let query = Query::raw_read_query( "SELECT temperature FROM /weather_[a-z]*$/ WHERE time > now() - 1m ORDER BY DESC", ); let mut db_result = client.json_query(query).await?; let _result = db_result .deserialize_next::<WeatherWithoutCityName>()? .series .into_iter() .map(|mut city_series| { let city_name = city_series.name.split("_").collect::<Vec<&str>>().remove(2); Weather { weather: city_series.values.remove(0), city_name: city_name.to_string(), } }) .collect::<Vec<Weather>>();
Structs
Series | Represents a returned series from InfluxDB |