relm4-macros 0.11.0

An idiomatic GUI library inspired by Elm and based on gtk4-rs
Documentation
use proc_macro2::TokenStream as TokenStream2;
use quote::quote;

use crate::widgets::{IfBranch, IfCondition};

impl IfBranch {
    pub(crate) fn update_stream(
        &self,
        stream: &mut TokenStream2,
        inner_update_tokens: &TokenStream2,
        index: usize,
    ) {
        let index = index.to_string();
        stream.extend(match &self.cond {
            IfCondition::If(if_token, expr) => quote! {
                #if_token #expr
            },
            IfCondition::ElseIf(else_token, if_token, expr) => quote! {
                #else_token #if_token #expr
            },
            IfCondition::Else(else_token) => quote! {
                #else_token
            },
        });
        stream.extend(quote! {
            {
                let page_active: bool = (current_page == #index);
                #inner_update_tokens
                #index
            }
        });
    }
}