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
use super::{definitions::Granularity, JsonAny}; use crate::serialization::default_for_null; use crate::serialization::tagged_or_untagged; use serde::de::DeserializeOwned; use serde::{Deserialize, Serialize}; use std::collections::HashMap; #[derive(Deserialize, Serialize, Debug)] pub struct DruidListResponse<T: DeserializeOwned> { pub timestamp: String, #[serde(bound (deserialize = ""))] pub result: Vec<T>, } #[derive(Deserialize, Serialize, Debug)] pub struct MetadataResponse<T: DeserializeOwned> { pub timestamp: String, #[serde(bound (deserialize = ""))] pub result: T, } pub type TopNResponse<T> = DruidListResponse<T>; #[derive(Deserialize, Serialize, Debug)] pub struct GroupByResponse<T: DeserializeOwned> { pub timestamp: String, #[serde(bound (deserialize = ""))] pub event: T, } #[derive(Deserialize, Serialize, Debug)] pub struct DimValue { pub dimension: String, pub value: JsonAny, pub count: usize, } pub type SearchResponse = DruidListResponse<DimValue>; #[serde(rename_all = "camelCase")] #[derive(Deserialize, Serialize, Debug)] pub struct ScanResponse<T: DeserializeOwned> { segment_id: String, columns: Vec<String>, #[serde(bound (deserialize = ""))] events: Vec<T>, } #[derive(Deserialize, Serialize, Debug)] #[serde(rename_all = "camelCase")] pub struct MinMaxTime { pub max_time: Option<String>, pub min_time: Option<String>, } #[derive(Deserialize, Serialize, Debug)] pub struct TimeBoundaryResponse { timestamp: String, result: MinMaxTime, } #[derive(Deserialize, Serialize, Debug)] #[serde(rename_all = "camelCase")] pub struct ColumnDefinition { #[serde(rename(deserialize = "type"))] column_type: String, has_multiple_values: bool, size: usize, cardinality: Option<f32>, min_value: Option<JsonAny>, max_value: Option<JsonAny>, error_message: Option<String>, } #[derive(Deserialize, Serialize, Debug)] #[serde(rename_all = "camelCase")] pub struct AggregatorDefinition { #[serde(rename(deserialize = "type"))] aggr_type: String, name: String, field_name: String, expression: Option<String>, } #[derive(Deserialize, Serialize, Debug)] #[serde(rename_all = "camelCase")] pub struct TimestampSpec { column: String, format: String, missing_value: Option<String>, } #[derive(Deserialize, Serialize, Debug)] #[serde(rename_all = "camelCase")] pub struct SegmentMetadataResponse { id: String, #[serde(default, deserialize_with = "default_for_null")] intervals: Vec<String>, columns: HashMap<String, ColumnDefinition>, #[serde(deserialize_with = "tagged_or_untagged")] query_granularity: Granularity, rollup: Option<bool>, size: Option<usize>, num_rows: Option<usize>, timestamp_spec: TimestampSpec, #[serde(default, deserialize_with = "default_for_null")] aggregators: HashMap<String, AggregatorDefinition>, } #[derive(Deserialize, Serialize, Debug)] #[serde(rename_all = "camelCase")] pub struct TimeseriesResponse<T: DeserializeOwned> { timestamp: Option<String>, #[serde(bound (deserialize = ""))] result: T, }