Skip to content

Commit

Permalink
Generate json file for protocols
Browse files Browse the repository at this point in the history
  • Loading branch information
morr0ne committed Sep 4, 2024
1 parent 2bc762a commit 88e36ff
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 38 deletions.
25 changes: 25 additions & 0 deletions gen/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions gen/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,6 @@ proc-macro2 = { version = "1.0.86", default-features = false }
quick-xml = { version = "0.36.1", features = ["serialize", "overlapped-lists"] }
quote = { version = "1.0.36", default-features = false }
serde = { version = "1.0.207", features = ["derive"] }
serde_json = "1.0.127"
tracing = "0.1.40"
tracing-subscriber = { version = "0.3.18", features = ["env-filter"] }
10 changes: 9 additions & 1 deletion gen/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ const PROTOCOLS: &[&str] = &[
"wayland-protocols/unstable/xdg-shell/xdg-shell-unstable-v5.xml",
"wayland-protocols/unstable/xdg-shell/xdg-shell-unstable-v6.xml",
"wayland-protocols/unstable/xwayland-keyboard-grab/xwayland-keyboard-grab-unstable-v1.xml",

// Wlroots protocols
"wlr-protocols/unstable/wlr-data-control-unstable-v1.xml",
"wlr-protocols/unstable/wlr-export-dmabuf-unstable-v1.xml",
Expand Down Expand Up @@ -103,5 +103,13 @@ fn main() -> Result<()> {

write!(&mut client_path, "{}", generate_client_code(&protocols))?;

let mut json_path = OpenOptions::new()
.truncate(true)
.write(true)
.create(true)
.open("protocols.json")?;

serde_json::to_writer(&mut json_path, &protocols)?;

Ok(())
}
74 changes: 37 additions & 37 deletions gen/src/parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,118 +11,118 @@ use crate::utils::make_ident;
#[derive(Debug, Deserialize, Serialize, Clone)]
#[serde(deny_unknown_fields)]
pub struct Protocol {
#[serde(rename = "@name")]
#[serde(rename(deserialize = "@name"))]
pub name: String,
pub copyright: Option<String>,
pub description: Option<String>,
#[serde(default, rename = "interface")]
#[serde(default, rename(deserialize = "interface"))]
pub interfaces: Vec<Interface>,
}

#[derive(Debug, Deserialize, Serialize, Clone)]
#[serde(deny_unknown_fields)]
pub struct Interface {
#[serde(rename = "@name")]
#[serde(rename(deserialize = "@name"))]
pub name: String,
#[serde(rename = "@version")]
#[serde(rename(deserialize = "@version"))]
pub version: u32,
pub description: Option<String>,
#[serde(default, rename = "request")]
#[serde(default, rename(deserialize = "request"))]
pub requests: Vec<Message>,
#[serde(default, rename = "event")]
#[serde(default, rename(deserialize = "event"))]
pub events: Vec<Message>,
#[serde(default, rename = "enum")]
#[serde(default, rename(deserialize = "enum"))]
pub enums: Vec<Enum>,
}

#[derive(Debug, Deserialize, Serialize, Clone)]
#[serde(deny_unknown_fields)]
pub struct Message {
#[serde(rename = "@name")]
#[serde(rename(deserialize = "@name"))]
pub name: String,
#[serde(rename = "@type")]
#[serde(rename(deserialize = "@type"))]
pub ty: Option<MessageType>,
#[serde(rename = "@since")]
#[serde(rename(deserialize = "@since"))]
pub since: Option<usize>,
#[serde(rename = "@deprecated-since")]
#[serde(rename(deserialize = "@deprecated-since"))]
pub deprecated_since: Option<usize>,
pub description: Option<String>,
#[serde(default, rename = "arg")]
#[serde(default, rename(deserialize = "arg"))]
pub args: Vec<Arg>,
}

#[derive(Debug, Deserialize, Serialize, Clone)]

pub enum MessageType {
#[serde(rename = "destructor")]
#[serde(rename(deserialize = "destructor"))]
Destructor,
}

#[derive(Debug, Deserialize, Serialize, Clone)]
#[serde(deny_unknown_fields)]
pub struct Arg {
#[serde(rename = "@name")]
#[serde(rename(deserialize = "@name"))]
pub name: String,
#[serde(rename = "@type")]
#[serde(rename(deserialize = "@type"))]
pub ty: ArgType,
#[serde(rename = "@interface")]
#[serde(rename(deserialize = "@interface"))]
pub interface: Option<String>,
#[serde(rename = "@enum")]
#[serde(rename(deserialize = "@enum"))]
pub r#enum: Option<String>,
#[serde(default, rename = "@allow-null")]
#[serde(default, rename(deserialize = "@allow-null"))]
pub allow_null: bool,
#[serde(rename = "@summary")]
#[serde(rename(deserialize = "@summary"))]
pub summary: Option<String>,
}

#[derive(Debug, Deserialize, Serialize, PartialEq, Eq, Clone)]
pub enum ArgType {
#[serde(rename = "int")]
#[serde(rename(deserialize = "int"))]
Int,
#[serde(rename = "uint")]
#[serde(rename(deserialize = "uint"))]
Uint,
#[serde(rename = "fixed")]
#[serde(rename(deserialize = "fixed"))]
Fixed,
#[serde(rename = "string")]
#[serde(rename(deserialize = "string"))]
String,
#[serde(rename = "object")]
#[serde(rename(deserialize = "object"))]
Object,
#[serde(rename = "new_id")]
#[serde(rename(deserialize = "new_id"))]
NewId,
#[serde(rename = "array")]
#[serde(rename(deserialize = "array"))]
Array,
#[serde(rename = "fd")]
#[serde(rename(deserialize = "fd"))]
Fd,
}

#[derive(Debug, Deserialize, Serialize, Clone)]
#[serde(deny_unknown_fields)]
pub struct Enum {
#[serde(rename = "@name")]
#[serde(rename(deserialize = "@name"))]
pub name: String,
#[serde(default, rename = "@bitfield")]
#[serde(default, rename(deserialize = "@bitfield"))]
pub bitfield: bool,
#[serde(rename = "@since")]
#[serde(rename(deserialize = "@since"))]
pub since: Option<usize>,
#[serde(rename = "@deprecated-since")]
#[serde(rename(deserialize = "@deprecated-since"))]
pub deprecated_since: Option<usize>,
pub description: Option<String>,
#[serde(rename = "entry")]
#[serde(rename(deserialize = "entry"))]
pub entries: Vec<Entry>,
}

#[derive(Debug, Deserialize, Serialize, Clone)]
#[serde(deny_unknown_fields)]
pub struct Entry {
#[serde(rename = "@name")]
#[serde(rename(deserialize = "@name"))]
pub name: String,
#[serde(rename = "@value")]
#[serde(rename(deserialize = "@value"))]
pub value: String,
#[serde(rename = "@summary")]
#[serde(rename(deserialize = "@summary"))]
pub summary: Option<String>,
#[serde(rename = "@since")]
#[serde(rename(deserialize = "@since"))]
pub since: Option<usize>,
#[serde(rename = "@deprecated-since")]
#[serde(rename(deserialize = "@deprecated-since"))]
pub deprecated_since: Option<usize>,
pub description: Option<String>,
}
Expand Down

0 comments on commit 88e36ff

Please sign in to comment.