use super::{PurgeableState, Resource, ResourceID, ResourceViewPool};
use crate::Error;
use std::ops::Range;
pub struct ResourceOwnerIdentity {
inner: metal_rust_ffi::ResourceOwnerIdentity,
}
impl ResourceOwnerIdentity {
pub fn current_process() -> Result<Self, Error> {
metal_rust_ffi::ResourceOwnerIdentity::current_process()
.map(|inner| Self { inner })
.map_err(Error::from_ffi)
}
}
impl Resource {
pub fn is_aliasable(&self) -> Result<bool, Error> {
self.inner.is_aliasable().map_err(Error::from_ffi)
}
pub fn make_aliasable(&self) -> Result<(), Error> {
self.inner.make_aliasable().map_err(Error::from_ffi)
}
pub fn set_owner(&self, identity: &ResourceOwnerIdentity) -> Result<(), Error> {
self.inner
.set_owner(&identity.inner)
.map_err(Error::from_ffi)
}
pub fn set_purgeable_state(&self, state: PurgeableState) -> Result<PurgeableState, Error> {
self.inner
.set_purgeable_state(state)
.map_err(Error::from_ffi)
}
}
impl ResourceViewPool {
pub fn base_resource_id(&self) -> Result<ResourceID, Error> {
self.inner.base_resource_id().map_err(Error::from_ffi)
}
pub fn copy_resource_views_from_pool(
&self,
source: &ResourceViewPool,
source_range: Range<usize>,
destination_index: usize,
) -> Result<ResourceID, Error> {
self.inner
.copy_resource_views_from_pool(&source.inner, source_range, destination_index)
.map_err(Error::from_ffi)
}
}