use serde::{Deserialize, Serialize};
use crate::model::error::ObzError;
use crate::model::log::LogEntry;
use crate::model::metric::MetricSeries;
use crate::model::trace::Span;
pub type ProviderResult<T> = Result<T, ObzError>;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum MetricResultType {
Scalar,
Vector,
Matrix,
}
#[derive(Debug)]
pub struct MetricQueryResult {
pub result_type: MetricResultType,
pub series: Vec<MetricSeries>,
pub scalar: Option<(i64, f64)>,
pub total_count: usize,
}
#[derive(Debug)]
pub struct LogSearchResult {
pub entries: Vec<LogEntry>,
pub total_count: usize,
pub is_complete: Option<bool>,
pub cursor: Option<String>,
}
#[derive(Debug)]
pub struct TraceSearchResult {
pub spans: Vec<Span>,
pub total_count: usize,
pub is_complete: Option<bool>,
pub cursor: Option<String>,
}
#[derive(Debug)]
pub struct ExtensionResult {
pub data: serde_json::Value,
pub total_count: Option<usize>,
}
impl ExtensionResult {
pub fn from_strings(items: Vec<String>) -> Self {
let total_count = items.len();
Self {
data: serde_json::Value::Array(
items.into_iter().map(serde_json::Value::String).collect(),
),
total_count: Some(total_count),
}
}
pub fn from_value(data: serde_json::Value) -> Self {
Self {
data,
total_count: None,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn from_strings_empty_list() {
let result = ExtensionResult::from_strings(vec![]);
assert_eq!(result.data, serde_json::json!([]));
assert_eq!(result.total_count, Some(0));
}
#[test]
fn from_strings_normal_list() {
let result =
ExtensionResult::from_strings(vec!["a".to_string(), "b".to_string(), "c".to_string()]);
assert_eq!(result.data, serde_json::json!(["a", "b", "c"]));
assert_eq!(result.total_count, Some(3));
}
#[test]
fn from_value_object() {
let result = ExtensionResult::from_value(serde_json::json!({"key": "val"}));
assert_eq!(result.data, serde_json::json!({"key": "val"}));
assert_eq!(result.total_count, None);
}
#[test]
fn from_value_array() {
let result = ExtensionResult::from_value(serde_json::json!([1, 2, 3]));
assert_eq!(result.data, serde_json::json!([1, 2, 3]));
assert_eq!(result.total_count, None);
}
}