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
//! # Async rust client for Apache Druid
//!
//! Fully asynchronous, future-enabled [Apache Druid](http://druid.io/) client library for rust programming language.
//!
//! The library provides staticly typed API for [Native Queries](https://druid.apache.org/docs/latest/querying/querying.html)
//!
//! ## Installation
//! The library is hosted on [crates.io](https://crates.io/crates/druid-io/).
//!
//! ```toml
//! [dependencies]
//! druid-io = "*"
//! ```
//!
//! ## Supported Native Queries
//!
//! * Timeseries
//! * TopN
//! * GroupBy
//! * Scan
//! * Search
//! * TimeBoundary
//! * SegmentMetadata
//! * DataSourceMetadata
//!
//! ## Usage
//!
//! ### Client
//!
//! Connect to a druid cluster throughly staticly provided list of brokers:
//!
//! ```rust
//! use druid_io::client::DruidClient;
//!
//! let druid_client = DruidClient::new(vec!["localhost:8082".to_string()]);
//! ```
//!
//! ### Querying
//!
//! #### Timeseries
//!
//! See [Timeseries query documentation](https://druid.apache.org/docs/latest/querying/timeseriesquery.html)
//!
//! ```rust
//! use druid_io::client::DruidClient;
//! use serde::Deserialize;
//! use serde::Serialize;
//! use druid_io::{
//!     query::timeseries::Timeseries,
//!     query::{
//!         definitions::Aggregation,
//!         definitions::{Dimension, Filter, Granularity, Ordering, OutputType, SortingOrder},
//!         group_by::{
//!             PostAggregation, PostAggregator,
//!         },
//!         DataSource
//!     },
//! };
//! 
//! #[derive(Serialize, Deserialize, Debug)]
//! pub struct TimeAggr {
//!     count: usize,
//!     count_fraction: f32,
//!     user: String,
//! }
//!
//! let druid_client = DruidClient::new(vec!["localhost:8082".to_string()]);
//!
//! let timeseries = Timeseries {
//!     data_source: DataSource::table("wikipedia"),
//!     limit: Some(10),
//!     descending: false,
//!     granularity: Granularity::All,
//!     filter: Some(Filter::selector("user", "Taffe316")),
//!     aggregations: vec![
//!         Aggregation::count("count"),
//!         Aggregation::StringFirst {
//!             name: "user".into(),
//!             field_name: "user".into(),
//!             max_string_bytes: 1024,
//!         },
//!     ],
//!     post_aggregations: vec![PostAggregation::Arithmetic {
//!         name: "count_fraction".into(),
//!         function: "/".into(),
//!         fields: vec![
//!             PostAggregator::field_access("count_percent", "count"),
//!             PostAggregator::constant("hundred", 100.into()),
//!         ],
//!         ordering: None,
//!     }],
//!     intervals: vec!["-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z".into()],
//!     context: Default::default(),
//! };
//! let result = druid_client.timeseries::<TimeAggr>(&timeseries);
//!
//! ```

extern crate serde_json;

pub mod client;
pub mod connection;
pub mod query;
pub mod serialization;

#[cfg(test)]
mod tests {
    #[test]
    fn it_works() {
        assert_eq!(2 + 2, 4);
    }
}