declared interfaces and more wrappers

This commit is contained in:
neo
2026-08-25 17:55:57 +02:00
parent aeab2375c8
commit 61cfcf283f
9 changed files with 235 additions and 23 deletions
+39
View File
@@ -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
}
}