Vendor things
This commit is contained in:
parent
5deceec006
commit
977e3c17e5
19434 changed files with 10682014 additions and 0 deletions
178
third-party/vendor/wayland-scanner/src/protocol.rs
vendored
Normal file
178
third-party/vendor/wayland-scanner/src/protocol.rs
vendored
Normal file
|
|
@ -0,0 +1,178 @@
|
|||
use proc_macro2::TokenStream;
|
||||
use quote::quote;
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct Protocol {
|
||||
pub name: String,
|
||||
pub copyright: Option<String>,
|
||||
pub description: Option<(String, String)>,
|
||||
pub interfaces: Vec<Interface>,
|
||||
}
|
||||
|
||||
impl Protocol {
|
||||
pub fn new(name: String) -> Protocol {
|
||||
Protocol { name, copyright: None, description: None, interfaces: Vec::new() }
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct Interface {
|
||||
pub name: String,
|
||||
pub version: u32,
|
||||
pub description: Option<(String, String)>,
|
||||
pub requests: Vec<Message>,
|
||||
pub events: Vec<Message>,
|
||||
pub enums: Vec<Enum>,
|
||||
}
|
||||
|
||||
impl Interface {
|
||||
pub fn new() -> Interface {
|
||||
Interface {
|
||||
name: String::new(),
|
||||
version: 1,
|
||||
description: None,
|
||||
requests: Vec::new(),
|
||||
events: Vec::new(),
|
||||
enums: Vec::new(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct Message {
|
||||
pub name: String,
|
||||
pub typ: Option<Type>,
|
||||
pub since: u32,
|
||||
pub description: Option<(String, String)>,
|
||||
pub args: Vec<Arg>,
|
||||
pub type_index: usize,
|
||||
}
|
||||
|
||||
impl Message {
|
||||
pub fn new() -> Message {
|
||||
Message {
|
||||
name: String::new(),
|
||||
typ: None,
|
||||
since: 1,
|
||||
description: None,
|
||||
args: Vec::new(),
|
||||
type_index: 0,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn all_null(&self) -> bool {
|
||||
self.args
|
||||
.iter()
|
||||
.all(|a| !((a.typ == Type::Object || a.typ == Type::NewId) && a.interface.is_some()))
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct Arg {
|
||||
pub name: String,
|
||||
pub typ: Type,
|
||||
pub interface: Option<String>,
|
||||
pub summary: Option<String>,
|
||||
pub description: Option<(String, String)>,
|
||||
pub allow_null: bool,
|
||||
pub enum_: Option<String>,
|
||||
}
|
||||
|
||||
impl Arg {
|
||||
pub fn new() -> Arg {
|
||||
Arg {
|
||||
name: String::new(),
|
||||
typ: Type::Object,
|
||||
interface: None,
|
||||
summary: None,
|
||||
description: None,
|
||||
allow_null: false,
|
||||
enum_: None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct Enum {
|
||||
pub name: String,
|
||||
pub since: u16,
|
||||
pub description: Option<(String, String)>,
|
||||
pub entries: Vec<Entry>,
|
||||
pub bitfield: bool,
|
||||
}
|
||||
|
||||
impl Enum {
|
||||
pub fn new() -> Enum {
|
||||
Enum {
|
||||
name: String::new(),
|
||||
since: 1,
|
||||
description: None,
|
||||
entries: Vec::new(),
|
||||
bitfield: false,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct Entry {
|
||||
pub name: String,
|
||||
pub value: u32,
|
||||
pub since: u16,
|
||||
pub description: Option<(String, String)>,
|
||||
pub summary: Option<String>,
|
||||
}
|
||||
|
||||
impl Entry {
|
||||
pub fn new() -> Entry {
|
||||
Entry { name: String::new(), value: 0, since: 1, description: None, summary: None }
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialEq, Eq, Copy, Clone)]
|
||||
pub enum Type {
|
||||
Int,
|
||||
Uint,
|
||||
Fixed,
|
||||
String,
|
||||
Object,
|
||||
NewId,
|
||||
Array,
|
||||
Fd,
|
||||
Destructor,
|
||||
}
|
||||
|
||||
impl Type {
|
||||
pub fn nullable(self) -> bool {
|
||||
match self {
|
||||
Type::String | Type::Object | Type::NewId | Type::Array => true,
|
||||
_ => false,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn rust_type(self) -> TokenStream {
|
||||
match self {
|
||||
Type::Int => quote!(i32),
|
||||
Type::Uint => quote!(u32),
|
||||
Type::Fixed => quote!(f64),
|
||||
Type::Array => quote!(Vec<u8>),
|
||||
Type::Fd => quote!(::std::os::unix::io::RawFd),
|
||||
Type::String => quote!(String),
|
||||
Type::Object => quote!(ProxyId),
|
||||
_ => quote!(()),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn common_type(self) -> TokenStream {
|
||||
match self {
|
||||
Type::Int => quote!(Int),
|
||||
Type::Uint => quote!(Uint),
|
||||
Type::Fixed => quote!(Fixed),
|
||||
Type::Array => quote!(Array),
|
||||
Type::Fd => quote!(Fd),
|
||||
Type::String => quote!(Str),
|
||||
Type::Object => quote!(Object),
|
||||
Type::NewId => quote!(NewId),
|
||||
Type::Destructor => panic!("Destructor is not a valid argument type."),
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue