diff --git a/dev/server/src/env.rs b/dev/server/src/env.rs index b4120d32..0125c3ce 100644 --- a/dev/server/src/env.rs +++ b/dev/server/src/env.rs @@ -1,4 +1,4 @@ -#[derive(Debug, Clone, PartialEq, Eq)] +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct Env { pub listen: String, pub port: String, diff --git a/dev/server/src/error.rs b/dev/server/src/error.rs index 52e034fb..11750641 100644 --- a/dev/server/src/error.rs +++ b/dev/server/src/error.rs @@ -15,7 +15,7 @@ pub type AppError = AppErrorDetail; pub const APP_DEFAULT_ERROR_CODE: StatusCode = StatusCode::BAD_REQUEST; -#[derive(Error, Debug)] +#[derive(Error, Debug, Clone, PartialEq, Eq, Default, Hash)] #[error("{0}")] pub struct Logged(pub T); #[derive(Error, Debug)] @@ -88,7 +88,7 @@ pub mod kind { fn msg() -> &'static str; } - #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] + #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum NotFound {} impl Kind for NotFound { fn msg() -> &'static str { @@ -96,7 +96,7 @@ pub mod kind { } } - #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] + #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum BadRequest {} impl Kind for BadRequest { fn msg() -> &'static str { @@ -104,7 +104,7 @@ pub mod kind { } } - #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] + #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum Retriable {} impl Kind for Retriable { fn msg() -> &'static str { @@ -112,7 +112,7 @@ pub mod kind { } } - #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] + #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum Unreachable {} impl Kind for Unreachable { fn msg() -> &'static str { @@ -120,7 +120,7 @@ pub mod kind { } } } -#[derive(Error, Debug, Clone, PartialEq, Eq)] +#[derive(Error, Debug, Clone, PartialEq, Eq, Default, Hash)] pub struct AppErrorInner { pub msg: PhantomData, pub detail: T, @@ -130,7 +130,7 @@ impl IntoResponse for AppErrorInner { Json(ErrorResponseInner::from(self)).into_response() } } -#[derive(Error, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +#[derive(Error, Debug, Clone, PartialEq, Eq, Default, Hash, Serialize, Deserialize)] pub struct ErrorResponseInner { pub msg: String, pub detail: T, @@ -144,7 +144,7 @@ impl From> for ErrorResponseInner { pub mod counter { use super::*; - #[derive(Error, Debug, Clone, PartialEq, Eq)] + #[derive(Error, Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum CounterError { #[error("overflow counter")] Overflow(E), diff --git a/dev/server/src/route/counter.rs b/dev/server/src/route/counter.rs index de7c6e57..722a0b4b 100644 --- a/dev/server/src/route/counter.rs +++ b/dev/server/src/route/counter.rs @@ -34,7 +34,7 @@ pub fn route_counter() -> Router { .route("/resets", get(reset::)) } -#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)] +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Default, Hash, Serialize, Deserialize)] pub struct CounterState { #[serde(with = "bigint_string")] pub count: BigInt, @@ -56,11 +56,11 @@ mod bigint_string { } // TODO better implementation for increment/increments ? -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Default, Hash, Serialize, Deserialize)] pub struct CounterResponse { pub count: T, } -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Default, Hash, Serialize, Deserialize)] pub struct BInt(#[serde(with = "bigint_string")] pub BigInt); impl From for BInt { fn from(value: BigInt) -> Self { diff --git a/dev/server/src/route/echo.rs b/dev/server/src/route/echo.rs index 2fe4b359..bdfa8b0f 100644 --- a/dev/server/src/route/echo.rs +++ b/dev/server/src/route/echo.rs @@ -75,7 +75,7 @@ pub async fn json_body(body: Json) -> Json { body } -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Hash, Serialize, Deserialize)] pub struct Jsonizer(pub Vec<(String, String)>); impl Jsonizer { pub fn entry<'a, I: Iterator>( diff --git a/dev/server/src/route/health.rs b/dev/server/src/route/health.rs index 05efa1ff..a072f28c 100644 --- a/dev/server/src/route/health.rs +++ b/dev/server/src/route/health.rs @@ -19,7 +19,7 @@ pub fn route_health() -> Router { .route("/disabled", get(disabled)) } -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Default, Hash, Serialize, Deserialize)] pub struct Health { #[serde(flatten, with = "health_response")] pub status: StatusCode, @@ -31,7 +31,7 @@ impl IntoResponse for Health { } mod health_response { use super::*; - #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] + #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] struct HealthResponse { status: String, code: u16, diff --git a/dev/server/src/route/information.rs b/dev/server/src/route/information.rs index 80676b1d..7cc638d4 100644 --- a/dev/server/src/route/information.rs +++ b/dev/server/src/route/information.rs @@ -27,7 +27,7 @@ pub fn route_information() -> Router { .route("/*path", any(information)) } -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)] pub struct InformationResponse { #[serde(default)] pub datetime: Option>, diff --git a/dev/server/src/route/random.rs b/dev/server/src/route/random.rs index 623a952d..18e63fbc 100644 --- a/dev/server/src/route/random.rs +++ b/dev/server/src/route/random.rs @@ -52,7 +52,7 @@ where } } -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub struct RandomString { #[serde(default)] pub len: Option, @@ -103,7 +103,7 @@ impl RandomResponse { } } } -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub struct DistRangeParam { #[serde(default)] pub low: Option, diff --git a/dev/server/src/route/wait.rs b/dev/server/src/route/wait.rs index cc87804a..c050b238 100644 --- a/dev/server/src/route/wait.rs +++ b/dev/server/src/route/wait.rs @@ -10,33 +10,34 @@ use super::PinResponseFuture; pub fn route_wait() -> Router { Router::new() - .route("/:duration", get(DurationUnit::Seconds.handler())) + .route("/:duration", get(DurationUnit::default().handler())) .route("/:duration/s", get(DurationUnit::Seconds.handler())) .route("/:duration/ms", get(DurationUnit::Milliseconds.handler())) .route("/:duration/ns", get(DurationUnit::Nanoseconds.handler())) // .fallback() // TODO } -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Hash, Serialize, Deserialize)] pub struct WaitResponse { pub duration: u64, pub unit: DurationUnit, } -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Default, Hash, Serialize, Deserialize)] pub enum DurationUnit { - Seconds, - Milliseconds, Nanoseconds, + Milliseconds, + #[default] + Seconds, } impl DurationUnit { pub fn handler(self) -> impl FnOnce(Path) -> PinResponseFuture>> + Clone { // return type ref: https://github.com/tokio-rs/axum/pull/1082/files#diff-93eb961c85da77636607a224513f085faf7876f5a9f7091c13e05939aa5de33cR61-R62 - move |Path(duration): Path| { + move |Path(duration)| { let d = match self { - DurationUnit::Seconds => Duration::from_secs(duration), - DurationUnit::Milliseconds => Duration::from_millis(duration), DurationUnit::Nanoseconds => Duration::from_nanos(duration), + DurationUnit::Milliseconds => Duration::from_millis(duration), + DurationUnit::Seconds => Duration::from_secs(duration), }; let unit = self.clone(); Box::pin(async move { diff --git a/src/assault/evaluate/json.rs b/src/assault/evaluate/json.rs index 6ce494f8..222fd16e 100644 --- a/src/assault/evaluate/json.rs +++ b/src/assault/evaluate/json.rs @@ -11,7 +11,7 @@ use crate::{ interface::{config::Severity, helper::is_default::IsDefault}, }; -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)] #[serde(deny_unknown_fields, rename_all = "kebab-case")] pub struct JsonEvaluate { #[serde(default, skip_serializing_if = "IsDefault::is_default")] diff --git a/src/assault/evaluate/plaintext.rs b/src/assault/evaluate/plaintext.rs index 9cc5429e..48f97b75 100644 --- a/src/assault/evaluate/plaintext.rs +++ b/src/assault/evaluate/plaintext.rs @@ -10,7 +10,7 @@ use crate::{ error::EvaluateError, }; -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)] #[serde(deny_unknown_fields, rename_all = "kebab-case")] pub struct PlaintextEvaluate { pub regex: Option>, diff --git a/src/assault/service/origin_router.rs b/src/assault/service/origin_router.rs index 98a50b26..281edb92 100644 --- a/src/assault/service/origin_router.rs +++ b/src/assault/service/origin_router.rs @@ -5,7 +5,7 @@ use tower::Service; use crate::error::{AssaultError, Wrap}; -#[derive(Debug, Clone, PartialEq, Eq)] +#[derive(Debug, Clone, PartialEq, Eq, Default)] pub struct OriginRouter { map: HashMap, phantom: PhantomData, diff --git a/src/assault/service/record.rs b/src/assault/service/record.rs index 41dc6e23..9c1f82d9 100644 --- a/src/assault/service/record.rs +++ b/src/assault/service/record.rs @@ -100,7 +100,7 @@ where } } -#[derive(Debug, Clone)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Hash)] pub struct RecordLayer { path: Option, } @@ -117,7 +117,7 @@ impl Layer for RecordLayer { } } -#[derive(Debug, Clone)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Hash)] pub struct RecordService { path: Option, inner: S, diff --git a/src/assault/worker.rs b/src/assault/worker.rs index e8c6c25b..c5205c92 100644 --- a/src/assault/worker.rs +++ b/src/assault/worker.rs @@ -26,7 +26,7 @@ use super::{ }; /// TODO document -#[derive(Debug)] +#[derive(Debug, PartialEq, Eq, Hash)] pub struct Control<'a, Q, P, S, Req> { client: &'a mut S, phantom: PhantomData<(Q, P, S, Req)>, @@ -61,7 +61,7 @@ where } /// TODO document -#[derive(Debug)] +#[derive(Debug, PartialEq, Eq, Hash)] pub struct Worker<'a, Q, P, S, Req> { client: &'a mut S, phantom: PhantomData<(Q, P, Req, S)>, @@ -99,7 +99,7 @@ where } /// TODO document -#[derive(Debug)] +#[derive(Debug, PartialEq, Eq, Hash)] pub struct Case<'a, Q, P, S, Req> { client: &'a mut S, phantom: PhantomData<(Q, P, S, Req)>, diff --git a/src/implement/service_http/client.rs b/src/implement/service_http/client.rs index 90c0f2c5..737a3a5b 100644 --- a/src/implement/service_http/client.rs +++ b/src/implement/service_http/client.rs @@ -11,7 +11,7 @@ use crate::error::WrappedResult; pub const APP_USER_AGENT: &str = concat!(env!("CARGO_PKG_NAME"), "/", env!("CARGO_PKG_VERSION"),); -#[derive(Debug)] +#[derive(Debug, Default)] pub struct DefaultHttpClient { client: reqwest::Client, phantom: PhantomData<(ReqB, ResB)>, diff --git a/src/implement/service_http/evaluate.rs b/src/implement/service_http/evaluate.rs index 472edb3b..d9e25be3 100644 --- a/src/implement/service_http/evaluate.rs +++ b/src/implement/service_http/evaluate.rs @@ -15,7 +15,7 @@ use crate::{ interface::helper::{coalesce::Coalesce, http_serde_priv, is_default::IsDefault}, }; -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)] #[serde(deny_unknown_fields, rename_all = "kebab-case")] pub struct HttpResponse { #[serde(default, skip_serializing_if = "IsDefault::is_default")] @@ -28,7 +28,7 @@ pub struct HttpResponse { #[cfg_attr(feature = "yaml", serde(with = "serde_yaml::with::singleton_map_recursive"))] pub body: BodyEvaluate, } -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)] #[serde(deny_unknown_fields, rename_all = "kebab-case")] pub enum StatusEvaluate { #[default] @@ -36,7 +36,7 @@ pub enum StatusEvaluate { Expect(AllOr), Ignore, } -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)] #[serde(deny_unknown_fields, rename_all = "kebab-case")] pub enum HeaderEvaluate { #[default] @@ -44,7 +44,7 @@ pub enum HeaderEvaluate { Expect(AllOr), Ignore, } -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)] #[serde(deny_unknown_fields, rename_all = "kebab-case")] pub enum BodyEvaluate { #[default] diff --git a/src/implement/service_http/factory.rs b/src/implement/service_http/factory.rs index 9567d781..51784c75 100644 --- a/src/implement/service_http/factory.rs +++ b/src/implement/service_http/factory.rs @@ -18,7 +18,7 @@ use crate::{ }, }; -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)] #[serde(deny_unknown_fields, rename_all = "kebab-case")] pub struct HttpRequest { #[serde(default, skip_serializing_if = "IsDefault::is_default")] @@ -30,7 +30,7 @@ pub struct HttpRequest { #[serde(default, skip_serializing_if = "IsDefault::is_default")] pub body: HttpBody, } -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)] #[serde(deny_unknown_fields, rename_all = "kebab-case", untagged)] pub enum HttpBody { #[default] diff --git a/src/interface/command.rs b/src/interface/command.rs index b662a39e..88b690fa 100644 --- a/src/interface/command.rs +++ b/src/interface/command.rs @@ -41,7 +41,7 @@ pub async fn execute() -> Result, } #[cfg_attr(feature = "cli", derive(ValueEnum))] -#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Hash, Serialize, Deserialize)] pub enum ReportFormat { /// without report #[cfg_attr(not(feature = "console-report"), default)] diff --git a/src/interface/config.rs b/src/interface/config.rs index cda02ace..cff75ad3 100644 --- a/src/interface/config.rs +++ b/src/interface/config.rs @@ -20,7 +20,7 @@ use super::helper::{coalesce::Coalesce, http_serde_priv, is_default::IsDefault, pub trait Configuration: Debug + Clone + PartialEq + Eq + Serialize + DeserializeOwned + Default {} impl Configuration for T where T: Debug + Clone + PartialEq + Eq + Serialize + DeserializeOwned + Default {} -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)] #[serde(deny_unknown_fields, rename_all = "kebab-case")] #[serde(bound = "Q: Configuration, P: Configuration")] pub struct Config { @@ -30,7 +30,7 @@ pub struct Config { #[serde(default, skip_serializing_if = "IsDefault::is_default")] pub testcases: Vec>, } -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)] #[serde(deny_unknown_fields, rename_all = "kebab-case")] #[serde(bound = "Q: Configuration, P: Configuration")] pub struct WorkerConfig { @@ -41,7 +41,7 @@ pub struct WorkerConfig { #[serde(default, skip_serializing_if = "IsDefault::is_default")] pub setting: Setting, } -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)] #[serde(deny_unknown_fields, rename_all = "kebab-case")] #[serde(bound = "Q: Configuration, P: Configuration")] pub struct Setting { @@ -59,7 +59,7 @@ pub struct Setting { pub response: P, } -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)] +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Default, Hash, Serialize, Deserialize)] #[serde(deny_unknown_fields, rename_all = "kebab-case")] pub struct Repeat(pub Option); impl Coalesce for Repeat { @@ -76,7 +76,7 @@ impl Repeat { } } -#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)] #[serde(deny_unknown_fields, rename_all = "kebab-case")] pub enum Severity { Allow, @@ -84,7 +84,7 @@ pub enum Severity { Error, } -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)] #[serde(deny_unknown_fields, rename_all = "kebab-case")] #[serde(bound = "Q: Configuration, P: Configuration")] pub struct Testcase { @@ -97,7 +97,7 @@ pub struct Testcase { #[serde(default, skip_serializing_if = "IsDefault::is_default")] pub attr: Attribute, } -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Hash, Serialize, Deserialize)] #[serde(deny_unknown_fields, rename_all = "kebab-case")] pub struct Attribute { #[serde(default, skip_serializing_if = "IsDefault::is_default")] @@ -149,7 +149,7 @@ impl Coalesce for Setting { } } -#[derive(Debug, Clone, PartialEq, Eq)] +#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum Format { #[cfg(feature = "json")] Json, diff --git a/src/interface/helper/coalesce.rs b/src/interface/helper/coalesce.rs index 4985669f..6a47060b 100644 --- a/src/interface/helper/coalesce.rs +++ b/src/interface/helper/coalesce.rs @@ -5,7 +5,7 @@ pub trait Coalesce { fn coalesce(self, other: &O) -> Self; } -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Hash, Serialize, Deserialize)] pub struct Coalesced { base: T, coalesced: Vec, diff --git a/src/interface/helper/http_serde_priv.rs b/src/interface/helper/http_serde_priv.rs index bbf9372e..91221cbf 100644 --- a/src/interface/helper/http_serde_priv.rs +++ b/src/interface/helper/http_serde_priv.rs @@ -2,7 +2,7 @@ use std::ops::{Deref, DerefMut}; use serde::{Deserialize, Serialize}; -#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Hash, Serialize, Deserialize)] pub struct Method(#[serde(with = "http_serde::method")] pub http::Method); impl From for Method { fn from(m: http::Method) -> Self { @@ -21,7 +21,7 @@ impl DerefMut for Method { } } -#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)] +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Default, Hash, Serialize, Deserialize)] pub struct StatusCode(#[serde(with = "http_serde::status_code")] pub http::StatusCode); impl From for StatusCode { fn from(s: http::StatusCode) -> Self { @@ -59,7 +59,7 @@ impl DerefMut for Uri { } } -#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)] +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Default, Hash, Serialize, Deserialize)] pub struct Version(#[serde(with = "http_serde::version")] pub http::Version); impl From for Version { fn from(v: http::Version) -> Self { @@ -78,7 +78,7 @@ impl DerefMut for Version { } } -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)] pub struct HeaderMap(#[serde(with = "http_serde::header_map")] pub http::HeaderMap); impl From for HeaderMap { fn from(m: http::HeaderMap) -> Self { @@ -97,7 +97,7 @@ impl DerefMut for HeaderMap { } } -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub struct Authority(#[serde(with = "http_serde::authority")] pub http::uri::Authority); impl From for Authority { fn from(a: http::uri::Authority) -> Self { diff --git a/src/interface/template.rs b/src/interface/template.rs index 19763e08..e821d0b2 100644 --- a/src/interface/template.rs +++ b/src/interface/template.rs @@ -67,7 +67,7 @@ impl Template { } } -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum Variable { Literal(String), Defined(String), diff --git a/tests/config/feature/template.yaml b/tests/config/feature/template.yaml index bdd9a999..2659fdbc 100644 --- a/tests/config/feature/template.yaml +++ b/tests/config/feature/template.yaml @@ -26,5 +26,5 @@ testcases: body: plaintext: regex: - server1: hello server1 - server2: hello server2 + server1: ^hello server1$ + server2: ^hello server2$