wayland-protocols 0.9.3

Generated API for the officials wayland protocol extensions
Documentation
extern crate wayland_scanner;

use std::env::var;
use std::path::Path;

use wayland_scanner::{Side, generate_code, generate_interfaces};

static BASE_PROTOCOL_DIR: &'static str = "./protocols/";

static STABLE_PROTOCOLS: &'static [(&'static str, &'static str)] =
    &[("presentation-time", "presentation-time/presentation-time.xml"),
      ("viewporter", "viewporter/viewporter.xml")];

static UNSTABLE_PROTOCOLS: &'static [(&'static str, &'static str)] =
    &[("fullscreen-shell", "fullscreen-shell/fullscreen-shell-unstable-v1.xml"),
      ("idle-inhibit", "idle-inhibit/idle-inhibit-unstable-v1.xml"),
      ("input-method", "input-method/input-method-unstable-v1.xml"),
      ("linux-dmabuf", "linux-dmabuf/linux-dmabuf-unstable-v1.xml"),
      ("pointer-constraints", "pointer-constraints/pointer-constraints-unstable-v1.xml"),
      ("pointer-gestures", "pointer-gestures/pointer-gestures-unstable-v1.xml"),
      ("relative-pointer", "relative-pointer/relative-pointer-unstable-v1.xml"),
      ("tablet", "tablet/tablet-unstable-v2.xml"),
      ("text-input", "text-input/text-input-unstable-v1.xml"),
      ("xdg-foreign", "xdg-foreign/xdg-foreign-unstable-v1.xml"),
      ("xdg-shell", "xdg-shell/xdg-shell-unstable-v6.xml")];

fn generate_protocol(name: &str, file: &Path, out_dir: &Path, client: bool, server: bool) {

    let protocol_file = Path::new(BASE_PROTOCOL_DIR).join(file);

    generate_interfaces(&protocol_file,
                        out_dir.join(&format!("{}_interfaces.rs", name)));

    if client {
        generate_code(&protocol_file,
                      out_dir.join(&format!("{}_client_api.rs", name)),
                      Side::Client);
    }

    if server {
        generate_code(&protocol_file,
                      out_dir.join(&format!("{}_server_api.rs", name)),
                      Side::Server);
    }
}

fn main() {
    let out_dir_str = var("OUT_DIR").unwrap();
    let out_dir = Path::new(&out_dir_str);

    let client = var("CARGO_FEATURE_CLIENT").ok().is_some();
    let server = var("CARGO_FEATURE_SERVER").ok().is_some();

    for &(name, file) in STABLE_PROTOCOLS {
        generate_protocol(name,
                          &Path::new("stable").join(file),
                          out_dir,
                          client,
                          server);
    }



    if var("CARGO_FEATURE_UNSTABLE_PROTOCOLS").ok().is_some() {
        for &(name, file) in UNSTABLE_PROTOCOLS {
            generate_protocol(name,
                              &Path::new("unstable").join(file),
                              out_dir,
                              client,
                              server);
        }
    }
}