macro_rules! k8s_match {
(@inner { $test:expr } { $($arms:tt)* } { }) => { ... };
(@inner { $test:expr } { $($arms:tt)* } { k8s_if_1_8!($($arm:tt)*), $($rest:tt)* }) => { ... };
(@inner { $test:expr } { $($arms:tt)* } { k8s_if_ge_1_8!($($arm:tt)*), $($rest:tt)* }) => { ... };
(@inner { $test:expr } { $($arms:tt)* } { k8s_if_le_1_8!($($arm:tt)*), $($rest:tt)* }) => { ... };
(@inner { $test:expr } { $($arms:tt)* } { k8s_if_1_9!($($arm:tt)*), $($rest:tt)* }) => { ... };
(@inner { $test:expr } { $($arms:tt)* } { k8s_if_ge_1_9!($($arm:tt)*), $($rest:tt)* }) => { ... };
(@inner { $test:expr } { $($arms:tt)* } { k8s_if_le_1_9!($($arm:tt)*), $($rest:tt)* }) => { ... };
(@inner { $test:expr } { $($arms:tt)* } { k8s_if_1_10!($($arm:tt)*), $($rest:tt)* }) => { ... };
(@inner { $test:expr } { $($arms:tt)* } { k8s_if_ge_1_10!($($arm:tt)*), $($rest:tt)* }) => { ... };
(@inner { $test:expr } { $($arms:tt)* } { k8s_if_le_1_10!($($arm:tt)*), $($rest:tt)* }) => { ... };
(@inner { $test:expr } { $($arms:tt)* } { k8s_if_1_11!($($arm:tt)*), $($rest:tt)* }) => { ... };
(@inner { $test:expr } { $($arms:tt)* } { k8s_if_ge_1_11!($($arm:tt)*), $($rest:tt)* }) => { ... };
(@inner { $test:expr } { $($arms:tt)* } { k8s_if_le_1_11!($($arm:tt)*), $($rest:tt)* }) => { ... };
(@inner { $test:expr } { $($arms:tt)* } { k8s_if_1_12!($($arm:tt)*), $($rest:tt)* }) => { ... };
(@inner { $test:expr } { $($arms:tt)* } { k8s_if_ge_1_12!($($arm:tt)*), $($rest:tt)* }) => { ... };
(@inner { $test:expr } { $($arms:tt)* } { k8s_if_le_1_12!($($arm:tt)*), $($rest:tt)* }) => { ... };
(@inner { $test:expr } { $($arms:tt)* } { k8s_if_1_13!($($arm:tt)*), $($rest:tt)* }) => { ... };
(@inner { $test:expr } { $($arms:tt)* } { k8s_if_ge_1_13!($($arm:tt)*), $($rest:tt)* }) => { ... };
(@inner { $test:expr } { $($arms:tt)* } { k8s_if_le_1_13!($($arm:tt)*), $($rest:tt)* }) => { ... };
(@inner { $test:expr } { $($arms:tt)* } { k8s_if_1_14!($($arm:tt)*), $($rest:tt)* }) => { ... };
(@inner { $test:expr } { $($arms:tt)* } { k8s_if_ge_1_14!($($arm:tt)*), $($rest:tt)* }) => { ... };
(@inner { $test:expr } { $($arms:tt)* } { k8s_if_le_1_14!($($arm:tt)*), $($rest:tt)* }) => { ... };
(@inner { $test:expr } { $($arms:tt)* } { k8s_if_1_15!($($arm:tt)*), $($rest:tt)* }) => { ... };
(@inner { $test:expr } { $($arms:tt)* } { k8s_if_ge_1_15!($($arm:tt)*), $($rest:tt)* }) => { ... };
(@inner { $test:expr } { $($arms:tt)* } { k8s_if_le_1_15!($($arm:tt)*), $($rest:tt)* }) => { ... };
(@inner { $test:expr } { $($arms:tt)* } { k8s_if_1_16!($($arm:tt)*), $($rest:tt)* }) => { ... };
(@inner { $test:expr } { $($arms:tt)* } { k8s_if_ge_1_16!($($arm:tt)*), $($rest:tt)* }) => { ... };
(@inner { $test:expr } { $($arms:tt)* } { k8s_if_le_1_16!($($arm:tt)*), $($rest:tt)* }) => { ... };
(@inner { $test:expr } { $($arms:tt)* } { $next_pat:pat $(if $cond:expr)? => $next_expr:expr, $($rest:tt)* }) => { ... };
($test:expr, { $($rest:tt)* }) => { ... };
}
A macro that emits a match
expr with the given test expression and arms.
The match arms can be annotated with the other conditional compilation macros in this crate so that they're only emitted
if the predicate is true.
The CustomResourceDefinition::create_custom_resource_definition
function returns an HTTP 201 CREATED
when it succeeds, but the codegen for v1.8 does not have a Created
variant in the response type. So extracting the successful result from
the response requires matching CreateCustomResourceDefinitionResponse::Other
for v1.8
and CreateCustomResourceDefinitionResponse::Created
for v1.9 and above.
Since CreateCustomResourceDefinitionResponse::Created
does not exist in v1.8,
and CreateCustomResourceDefinitionResponse::Other
would not be returned in v1.9 and above,
both arms need to be wrapped in conditional compilation predicates.
use k8s_openapi::apiextensions_apiserver::pkg::apis::apiextensions::v1beta1::{
CreateCustomResourceDefinitionResponse,
CustomResourceDefinition,
};
let response: CreateCustomResourceDefinitionResponse = unimplemented!();
let status_code: http::StatusCode = unimplemented!();
let custom_resource_definition: CustomResourceDefinition = k8s_match!((response, status_code), {
k8s_if_1_8!((CreateCustomResourceDefinitionResponse::Other(value), http::StatusCode::CREATED) => {
let value = match value? {
Some(value) => value,
None => unimplemented!(),
};
let custom_resource_definition = serde::Deserialize::deserialize(value)?;
Ok(custom_resource_definition)
}),
k8s_if_ge_1_9!((CreateCustomResourceDefinitionResponse::Created(custom_resource_definition), _) =>
Ok(custom_resource_definition)),
(other, status_code) => Err(format!("unexpected response {} {:?}", status_code, other)),
})?;