29 lines
667 B
Rust
29 lines
667 B
Rust
|
use std::sync::Arc;
|
||
|
|
||
|
use uuid::Uuid;
|
||
|
|
||
|
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord)]
|
||
|
pub enum ResourceState {
|
||
|
Loading,
|
||
|
Ready,
|
||
|
}
|
||
|
|
||
|
#[derive(Clone)]
|
||
|
pub struct Resource<T: Send + Sync + 'static> {
|
||
|
pub path: String,
|
||
|
pub data: Option<Arc<T>>,
|
||
|
pub uuid: Uuid,
|
||
|
pub state: ResourceState,
|
||
|
}
|
||
|
|
||
|
impl<T: Send + Sync + 'static> Resource<T> {
|
||
|
/// Create the resource with data, its assumed the state is `Ready`
|
||
|
pub fn with_data(path: &str, data: T) -> Self {
|
||
|
Self {
|
||
|
path: path.to_string(),
|
||
|
data: Some(Arc::new(data)),
|
||
|
uuid: Uuid::new_v4(),
|
||
|
state: ResourceState::Ready,
|
||
|
}
|
||
|
}
|
||
|
}
|