aiway-protocol 0.2.1

The aiway protocol lib
Documentation
use serde::Deserialize;
use serde::Serialize;

#[derive(Debug, Default, Serialize, Deserialize)]
pub struct LogEntry {
    /// 格式为:2022-01-01 00:00:00.000
    pub time: String,
    pub service: String,
    pub level: String,
    pub message: String,
}

#[derive(Debug, Serialize, Deserialize, Default)]
pub struct LogSearchReq {
    /// 查询参数,例如:level:INFO
    /// 查询语法参考:https://quickwit.io/docs/reference/query-language
    pub query: Option<String>,
    /// 秒级时间戳,包含
    pub start_timestamp: Option<i64>,
    /// 秒级时间戳,不包含
    pub end_timestamp: Option<i64>,
    /// 查询起始位置
    #[serde(default = "LogSearchReq::default_start_offset")]
    pub start_offset: usize,
    /// 查询最大数量
    #[serde(default = "LogSearchReq::default_max_hits")]
    pub max_hits: usize,
    /// 聚合参数
    pub aggs: Option<serde_json::Value>,
    /// 排序参数
    /// 参考文档:https://quickwit.io/docs/reference/rest-api#search-in-an-index
    /// 但文档里写的是`[String]`类型,传数组确会报错?
    ///
    /// 该字段目前仅对quickwit生效,在logg的实现中,会默认按时间倒序。
    pub sort_by: Option<String>,
}
impl LogSearchReq {
    fn default_start_offset() -> usize {
        0
    }
    fn default_max_hits() -> usize {
        10
    }
}

#[derive(Debug, Serialize, Deserialize, Default)]
pub struct LogSearchRes<T> {
    pub num_hits: usize,
    pub hits: Vec<T>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub aggregations: Option<serde_json::Value>,
}