sofie-cli 0.4.0

The `sofie` command: gen, check and the tools reading the app model.
Documentation
use proc_macro2::TokenStream;
use quote::quote;
use sofie_model::App;

use crate::clients::client_areas;

pub(super) fn clients_statement(app: &App) -> Option<TokenStream> {
    let bundles: Vec<TokenStream> = client_areas(app)
        .iter()
        .map(|area| {
            let name = &area.area;
            let keys = area.keys();
            quote!(sofie::engine::client_bundle!(#name, &[#(#keys),*]))
        })
        .collect();
    if bundles.is_empty() {
        return None;
    }
    Some(quote!(screens.clients(vec![#(#bundles),*]);))
}