use serde::{Deserialize, Serialize};
use std::time::Duration;
use strum_macros::Display;
use wheel_rs::serde::duration_serde;
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(rename_all = "kebab-case")]
pub struct PongSettings {
pub task_groups: Vec<TaskGroupSettings>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct TaskGroupSettings {
#[serde(with = "duration_serde", default = "interval_default")]
pub interval: Option<Duration>,
#[serde(with = "duration_serde", default = "timeout_default")]
pub timeout: Option<Duration>,
pub tasks: Vec<TaskSettings>,
}
fn interval_default() -> Option<Duration> {
Some(Duration::from_secs(3)) }
fn timeout_default() -> Option<Duration> {
Some(Duration::from_secs(5)) }
#[derive(Debug, Serialize, Deserialize, Display, Clone)]
pub enum TaskType {
#[serde(rename = "icmp")]
ICMP,
#[serde(rename = "tcp")]
TCP,
#[serde(rename = "http")]
HTTP,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(rename_all = "kebab-case")]
pub struct TaskSettings {
pub task_type: TaskType,
pub target: String,
}