pub mod filters { use super::handlers; use super::models::{Client, ListOptions}; use warp::Filter; /// The 4 REST API filters combined. pub fn filters( client: Client, ) -> impl Filter + Clone { list(client.clone()) .or(status(client.clone())) .or(get_config(client.clone())) .or(put_config(client.clone())) // .or(list_train(client.clone())) // .or(create(db.clone())) // // .or(update(db.clone())) // .or(delete(db.clone())) } /// GET /analytics?from=3&to=5 pub fn list( client: Client, ) -> impl Filter + Clone { warp::path!("analytics") .and(warp::get()) .and(warp::query::()) .and(with_client(client)) .and_then(handlers::list) } /// GET /analytics/status pub fn status( client: Client, ) -> impl Filter + Clone { warp::path!("analytics" / "status") .and(warp::get()) .and(with_client(client)) .and_then(handlers::status) } /// GET /analytics/config pub fn get_config( client: Client, ) -> impl Filter + Clone { warp::path!("analytics" / "config") .and(warp::get()) .and(with_client(client)) .and_then(handlers::get_config) } /// PATCH /analytics/config pub fn put_config( client: Client, ) -> impl Filter + Clone { warp::path!("analytics" / "config") .and(warp::patch()) .and(with_client(client)) .and(warp::body::json()) .and_then(handlers::patch_config) } /// GET /analytics/model // pub fn list_train( // client: Client, // ) -> impl Filter + Clone { // warp::path!("analytics" / "model") // .and(warp::get()) // .and(with_client(client)) // .and_then(handlers::list_train) // } fn with_client( client: Client, ) -> impl Filter + Clone { warp::any().map(move || client.clone()) } } mod handlers { use hastic::services::analytic_service::analytic_unit::types::PatchConfig; use serde_json::Value; use super::models::{Client, ListOptions, Status}; use crate::api::{BadQuery, API}; pub async fn list( opts: ListOptions, client: Client, ) -> Result { // match srv.get_threshold_detections(opts.from, opts.to, 10, 100_000.).await { match client.get_pattern_detection(opts.from, opts.to).await { Ok(segments) => Ok(API::json(&segments)), Err(e) => { println!("{:?}", e); Err(warp::reject::custom(BadQuery)) } } } pub async fn status(client: Client) -> Result { match client.get_status().await { Ok(ls) => Ok(API::json(&Status { status: ls })), Err(e) => { println!("{:?}", e); Err(warp::reject::custom(BadQuery)) } } } pub async fn get_config(client: Client) -> Result { match client.get_config().await { Ok(cf) => Ok(API::json(&cf)), Err(e) => { println!("{:?}", e); Err(warp::reject::custom(BadQuery)) } } } pub async fn patch_config(client: Client, patch: PatchConfig) -> Result { // println!("{:?}", patch); match client.patch_config(patch).await { Ok(cf) => Ok(API::json(&cf)), Err(e) => { println!("{:?}", e); Err(warp::reject::custom(BadQuery)) } } } // pub async fn list_train(client: Client) -> Result { // match client.get_train().await { // Ok(lt) => Ok(API::json(<)), // Err(e) => { // println!("{:?}", e); // Err(warp::reject::custom(BadQuery)) // } // } // } } mod models { use hastic::services::analytic_service::{self, types::LearningStatus}; use serde::{Deserialize, Serialize}; pub type Client = analytic_service::analytic_client::AnalyticClient; // The query parameters for list_todos. #[derive(Debug, Deserialize)] pub struct ListOptions { pub from: u64, pub to: u64, } #[derive(Debug, Serialize)] pub struct Status { pub status: LearningStatus, } }