[][src]Macro k8s_openapi::k8s_match

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.

Examples

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!(), // Append more response data and try again.
        };
        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)),
})?;