Files
wayland_server/src/resource.rs
T
2026-08-25 20:15:19 +02:00

40 lines
1.0 KiB
Rust

// SPDX-License-Identifier: 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
}
}