#wayland #codegen #bindings-generator #client-server #api-bindings #api-client

macro wayland-scanner

Wayland Scanner for generating rust APIs from XML wayland protocol files

140 releases

0.31.1 Jan 29, 2024
0.31.0 Sep 2, 2023
0.30.1 Jun 17, 2023
0.30.0 Dec 27, 2022
0.2.0 Nov 19, 2015

#549 in GUI

Download history 90236/week @ 2024-01-05 93627/week @ 2024-01-12 110617/week @ 2024-01-19 100646/week @ 2024-01-26 103971/week @ 2024-02-02 114246/week @ 2024-02-09 99547/week @ 2024-02-16 110413/week @ 2024-02-23 111029/week @ 2024-03-01 106566/week @ 2024-03-08 109011/week @ 2024-03-15 120610/week @ 2024-03-22 128270/week @ 2024-03-29 100063/week @ 2024-04-05 111185/week @ 2024-04-12 94670/week @ 2024-04-19

454,705 downloads per month
Used in 1,355 crates (17 directly)

MIT license

96KB
2K SLoC

crates.io docs.rs Continuous Integration codecov

wayland-scanner

This crate provides procedural macros for generating the rust code associated with a Wayland XML protocol specification, for use with the wayland-client, wayland-server and wayland-backend crates.

Before trying to use this crate, you may check if the protocol extension you want to use is not already exposed in the wayland-protocols crate.


lib.rs:

Wayland protocol code-generation machinnery

This crate provides procedural macros for generating the rust code associated with a Wayland XML protocol specification, for use with the wayland-client, wayland-server and wayland-backend crates.

Before trying to use this crate, you may check if the protocol extension you want to use is not already exposed in the wayland-protocols crate.

Example usage

Below is a template for generating the code for a custom protocol client-side. Server-side is identical, just replacing client by server. The path to the XML file is relative to the crate root.

// Generate the bindings in their own module
pub mod my_protocol {
    use wayland_client;
    // import objects from the core protocol if needed
    use wayland_client::protocol::*;

    // This module hosts a low-level representation of the protocol objects
    // you will not need to interact with it yourself, but the code generated
    // by the generate_client_code! macro will use it
    pub mod __interfaces {
        // import the interfaces from the core protocol if needed
        use wayland_client::protocol::__interfaces::*;
        wayland_scanner::generate_interfaces!("./path/to/the/protocol.xml");
    }
    use self::__interfaces::*;

    // This macro generates the actual types that represent the wayland objects of
    // your custom protocol
    wayland_scanner::generate_client_code!("./path/to/the/protocol.xml");
}

Dependencies

~1.5MB
~23K SLoC