gooey-rs 0.12.1

Tile-based UI library with audio support
Documentation
#![warn(unused_extern_crates)]

use std;
use yaml_serde;
use serde::{Deserialize, Serialize};
use gooey;
use gooey::prelude::*;

macro_rules! display {
  ($e:expr) => { println!("{}: {}", stringify!($e), $e); }
}
macro_rules! show {
  ($e:expr) => { println!("{}: {:?}", stringify!($e), $e); }
}
#[expect(unused_macros)]
macro_rules! pretty {
  ($e:expr) => { println!("{}: {:#?}", stringify!($e), $e); }
}

const CONFIG_PATH_YAML : &str = "Example.yaml";

#[derive(Deserialize, Serialize)]
pub struct Config {
  bindings : Bindings
}

fn main() {
  println!("gooey example: main...");
  // load example config
  let cfg = {
    let config_file = std::fs::File::open (CONFIG_PATH_YAML).unwrap();
    yaml_serde::from_reader::<std::fs::File, Config> (config_file).unwrap()
  };
  display!(yaml_serde::to_string (&cfg).unwrap());
  // print some size information
  gooey::report_sizes();
  // create a default interface
  let mut interface : Interface = Interface::with_root (Element {
    name: "Root".to_string(), .. Default::default()
  });
  interface.print_elements_tree();
  // manually construct an element subtree and attach to root
  let subtree = {
    let node = |text : &str| Node::new (Element {
      name:  text.to_uppercase(),
      model: model::Component::Text (text.into()).into(),
      .. Element::default()
    });
    let insert_under = |node_id| tree::InsertBehavior::UnderNode (node_id);
    let mut subtree  = TreeBuilder::new().with_root (node ("a")).build();
    let root_id      = subtree.root_node_id().unwrap().clone();
    let child_id     = subtree.insert (node ("b"), insert_under (&root_id))
      .unwrap();
    let _            = subtree.insert (node ("c"), insert_under (&child_id))
      .unwrap();
    subtree
  };
  let root_id = interface.root_id().clone();
  let events  = interface
    .action (&root_id, Action::Create (subtree, CreateOrder::Append));
  for (_, event) in events {
    show!(event);
  }
  interface.print_elements_tree_names();
  println!("gooey example: ...main");
}