use crate::common::error::RustBertError;
use crate::resources::{Resource, ResourceProvider};
use std::path::PathBuf;
use std::sync::{Arc, RwLock};
#[derive(Debug)]
pub struct BufferResource {
pub data: Arc<RwLock<Vec<u8>>>,
}
impl ResourceProvider for BufferResource {
fn get_local_path(&self) -> Result<PathBuf, RustBertError> {
Err(RustBertError::UnsupportedError)
}
fn get_resource(&self) -> Result<Resource, RustBertError> {
Ok(Resource::Buffer(self.data.write().unwrap()))
}
}
impl From<Vec<u8>> for BufferResource {
fn from(data: Vec<u8>) -> Self {
Self {
data: Arc::new(RwLock::new(data)),
}
}
}
impl From<Vec<u8>> for Box<dyn ResourceProvider> {
fn from(data: Vec<u8>) -> Self {
Box::new(BufferResource {
data: Arc::new(RwLock::new(data)),
})
}
}
impl From<RwLock<Vec<u8>>> for BufferResource {
fn from(lock: RwLock<Vec<u8>>) -> Self {
Self {
data: Arc::new(lock),
}
}
}
impl From<RwLock<Vec<u8>>> for Box<dyn ResourceProvider> {
fn from(lock: RwLock<Vec<u8>>) -> Self {
Box::new(BufferResource {
data: Arc::new(lock),
})
}
}