// 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, } impl Resource { pub(crate) fn from_raw(raw: *mut wl_resource) -> Option { NonNull::new(raw).map(| raw| Self { raw }) } pub fn new(client: &Client, id: u32, interface: &Interface) -> io::Result { 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.raw } }