wayland-protocols 0.7.6

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);
        }
    }
}