use serde::Deserialize;
#[derive(Debug, Clone, Deserialize)]
pub struct MetricView {
#[serde(default)]
pub version: Option<String>,
pub source: String,
#[serde(default)]
pub filter: Option<String>,
#[serde(default)]
pub joins: Vec<Join>,
#[serde(default, alias = "fields")]
pub dimensions: Vec<Dimension>,
#[serde(default)]
pub measures: Vec<Measure>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct Dimension {
pub name: String,
pub expr: String,
}
#[derive(Debug, Clone, Deserialize)]
pub struct Measure {
pub name: String,
pub expr: String,
}
#[derive(Debug, Clone, Deserialize)]
pub struct Join {
pub name: String,
pub source: String,
#[serde(default)]
pub on: Option<String>,
#[serde(default)]
pub using: Vec<String>,
#[serde(default)]
pub cardinality: Option<String>,
}
impl MetricView {
pub fn from_yaml(yaml: &str) -> Result<Self, serde_yml::Error> {
serde_yml::from_str(yaml)
}
}