use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BudgetTimePeriod {
pub start_date: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub end_date: Option<String>,
}
impl BudgetTimePeriod {
#[cfg(any(test, feature = "test-support"))]
pub fn fixture() -> Self {
Self {
start_date: "test-start_date".into(),
end_date: Some("test-end_date".into()),
}
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CurrentSpend {
#[serde(skip_serializing_if = "Option::is_none")]
pub amount: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub unit: Option<String>,
}
impl CurrentSpend {
#[cfg(any(test, feature = "test-support"))]
pub fn fixture() -> Self {
Self {
unit: Some("test-unit".into()),
..Default::default()
}
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BudgetProperties {
#[serde(skip_serializing_if = "Option::is_none")]
pub category: Option<String>,
pub amount: f64,
pub time_grain: String,
pub time_period: BudgetTimePeriod,
#[serde(skip_serializing_if = "Option::is_none")]
pub current_spend: Option<CurrentSpend>,
#[serde(skip_serializing_if = "Option::is_none")]
pub filter: Option<serde_json::Value>,
}
impl BudgetProperties {
#[cfg(any(test, feature = "test-support"))]
pub fn fixture() -> Self {
Self {
category: Some("test-category".into()),
time_grain: "test-time_grain".into(),
time_period: BudgetTimePeriod::fixture(),
current_spend: Some(CurrentSpend::fixture()),
..Default::default()
}
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Budget {
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(rename = "type")]
#[serde(skip_serializing_if = "Option::is_none")]
pub r#type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub e_tag: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub properties: Option<BudgetProperties>,
}
impl Budget {
#[cfg(any(test, feature = "test-support"))]
pub fn fixture() -> Self {
Self {
id: Some("test-id".into()),
name: Some("test-budget".into()),
r#type: Some("test-type".into()),
e_tag: Some("test-e_tag".into()),
properties: Some(BudgetProperties::fixture()),
}
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BudgetListResult {
#[serde(default)]
#[serde(skip_serializing_if = "Vec::is_empty")]
pub value: Vec<Budget>,
#[serde(skip_serializing_if = "Option::is_none")]
pub next_link: Option<String>,
}
impl BudgetListResult {
#[cfg(any(test, feature = "test-support"))]
pub fn fixture() -> Self {
Self {
value: vec![],
next_link: Some("test-next_link".into()),
}
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BudgetCreateRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub e_tag: Option<String>,
pub properties: BudgetProperties,
}
impl BudgetCreateRequest {
#[cfg(any(test, feature = "test-support"))]
pub fn fixture() -> Self {
Self {
e_tag: Some("test-e_tag".into()),
properties: BudgetProperties::fixture(),
}
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct QueryColumn {
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(rename = "type")]
#[serde(skip_serializing_if = "Option::is_none")]
pub r#type: Option<String>,
}
impl QueryColumn {
#[cfg(any(test, feature = "test-support"))]
pub fn fixture() -> Self {
Self {
name: Some("test-query_column".into()),
r#type: Some("test-type".into()),
}
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct QueryProperties {
#[serde(default)]
#[serde(skip_serializing_if = "Vec::is_empty")]
pub columns: Vec<QueryColumn>,
#[serde(default)]
#[serde(skip_serializing_if = "Vec::is_empty")]
pub rows: Vec<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub next_link: Option<String>,
}
impl QueryProperties {
#[cfg(any(test, feature = "test-support"))]
pub fn fixture() -> Self {
Self {
columns: vec![],
rows: vec![],
next_link: Some("test-next_link".into()),
}
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct QueryResult {
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(rename = "type")]
#[serde(skip_serializing_if = "Option::is_none")]
pub r#type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub properties: Option<QueryProperties>,
}
impl QueryResult {
#[cfg(any(test, feature = "test-support"))]
pub fn fixture() -> Self {
Self {
id: Some("test-id".into()),
name: Some("test-query_result".into()),
r#type: Some("test-type".into()),
properties: Some(QueryProperties::fixture()),
}
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct QueryTimePeriod {
#[serde(rename = "from")]
pub from: String,
#[serde(rename = "to")]
pub to: String,
}
impl QueryTimePeriod {
#[cfg(any(test, feature = "test-support"))]
pub fn fixture() -> Self {
Self {
from: "test-from".into(),
to: "test-to".into(),
}
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct QueryDataset {
#[serde(skip_serializing_if = "Option::is_none")]
pub granularity: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub aggregation: Option<serde_json::Value>,
#[serde(default)]
#[serde(skip_serializing_if = "Vec::is_empty")]
pub grouping: Vec<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub filter: Option<serde_json::Value>,
}
impl QueryDataset {
#[cfg(any(test, feature = "test-support"))]
pub fn fixture() -> Self {
Self {
granularity: Some("test-granularity".into()),
grouping: vec![],
..Default::default()
}
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct QueryDefinition {
#[serde(rename = "type")]
pub r#type: String,
pub timeframe: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub time_period: Option<QueryTimePeriod>,
pub dataset: QueryDataset,
}
impl QueryDefinition {
#[cfg(any(test, feature = "test-support"))]
pub fn fixture() -> Self {
Self {
r#type: "test-type".into(),
timeframe: "test-timeframe".into(),
time_period: Some(QueryTimePeriod::fixture()),
dataset: QueryDataset::fixture(),
}
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ForecastDefinition {
#[serde(rename = "type")]
pub r#type: String,
pub timeframe: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub time_period: Option<QueryTimePeriod>,
pub dataset: QueryDataset,
#[serde(skip_serializing_if = "Option::is_none")]
pub include_actual_cost: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub include_fresh_partial_cost: Option<bool>,
}
impl ForecastDefinition {
#[cfg(any(test, feature = "test-support"))]
pub fn fixture() -> Self {
Self {
r#type: "test-type".into(),
timeframe: "test-timeframe".into(),
time_period: Some(QueryTimePeriod::fixture()),
dataset: QueryDataset::fixture(),
include_actual_cost: Some(false),
include_fresh_partial_cost: Some(false),
}
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct UsageDetailProperties {
#[serde(skip_serializing_if = "Option::is_none")]
pub billing_period_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub usage_start: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub usage_end: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub instance_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub instance_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub resource_group: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub product: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub meter_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pretax_cost: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub currency: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub usage_quantity: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub unit_of_measure: Option<String>,
}
impl UsageDetailProperties {
#[cfg(any(test, feature = "test-support"))]
pub fn fixture() -> Self {
Self {
billing_period_id: Some("test-billing_period_id".into()),
usage_start: Some("test-usage_start".into()),
usage_end: Some("test-usage_end".into()),
instance_id: Some("test-instance_id".into()),
instance_name: Some("test-instance_name".into()),
resource_group: Some("test-resource_group".into()),
product: Some("test-product".into()),
meter_id: Some("test-meter_id".into()),
currency: Some("test-currency".into()),
unit_of_measure: Some("test-unit_of_measure".into()),
..Default::default()
}
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct UsageDetail {
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(rename = "type")]
#[serde(skip_serializing_if = "Option::is_none")]
pub r#type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub etag: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub properties: Option<UsageDetailProperties>,
}
impl UsageDetail {
#[cfg(any(test, feature = "test-support"))]
pub fn fixture() -> Self {
Self {
id: Some("test-id".into()),
name: Some("test-usage_detail".into()),
r#type: Some("test-type".into()),
etag: Some("test-etag".into()),
properties: Some(UsageDetailProperties::fixture()),
}
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct UsageDetailsListResult {
#[serde(default)]
#[serde(skip_serializing_if = "Vec::is_empty")]
pub value: Vec<UsageDetail>,
#[serde(skip_serializing_if = "Option::is_none")]
pub next_link: Option<String>,
}
impl UsageDetailsListResult {
#[cfg(any(test, feature = "test-support"))]
pub fn fixture() -> Self {
Self {
value: vec![],
next_link: Some("test-next_link".into()),
}
}
}