declared interfaces and more wrappers
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
//SPDX: GPL-2.0-only
|
||||
|
||||
use std::io;
|
||||
use std::ptr::NonNull;
|
||||
|
||||
use crate::Wrapper;
|
||||
use crate::client::Client;
|
||||
use crate::ffi::{wl_resource, wl_resource_create,wl_interface};
|
||||
use crate::interface::{WaylandInterface,Interface};
|
||||
|
||||
pub struct Resource {
|
||||
raw: NonNull<wl_resource>,
|
||||
}
|
||||
impl Resource {
|
||||
pub(crate) fn from_raw(raw: *mut wl_resource) -> Option<Self> {
|
||||
NonNull::new(raw).map(| raw| Self { raw })
|
||||
}
|
||||
|
||||
pub fn new<I: WaylandInterface>(client: &Client, id: u32, interface: &Interface<I>) -> io::Result<Self> {
|
||||
let ptr = unsafe { wl_resource_create(
|
||||
client.as_raw_ptr(),
|
||||
interface.get_raw().as_ptr(),
|
||||
interface.get_raw().read().version,
|
||||
id
|
||||
)};
|
||||
|
||||
let Some(raw) = NonNull::new(ptr) else {
|
||||
return Err(io::Error::last_os_error());
|
||||
};
|
||||
Ok(Self { raw })
|
||||
}
|
||||
}
|
||||
impl Wrapper for Resource {
|
||||
type T = wl_resource;
|
||||
|
||||
fn get_raw(&self) -> std::ptr::NonNull<Self::T> {
|
||||
self.raw
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user