Skip to main content

selfref_match

Macro selfref_match 

Source
macro_rules! selfref_match {
    (
        $selfref:expr, $field:ident {
            $( $first:ident $(:: $rest:ident)* ($binding:tt) => $body:block )*
        }
    ) => { ... };
}
Expand description

Pattern-match on a field of a SelfRef<T>, projecting to SelfRef<VariantInner> in each arm body.

Uses Deref to peek at the discriminant without consuming, then .map() to project into the taken arm. The unreachable!() in each map closure is genuinely unreachable because the matches! guard ensures only the correct variant reaches it.

Variants not listed are silently consumed and dropped.

§Example

selfref_match!(msg, payload {
    MessagePayload::RequestMessage(r) => { /* r: SelfRef<RequestMessage> */ }
    MessagePayload::ChannelMessage(c) => { /* c: SelfRef<ChannelMessage> */ }
})