46 lines · 1.1 KB · Rust
RawDownload
use crate::{AppContext, SharedString, SharedUri};use futures::Future;use std::hash::{Hash, Hasher};use std::path::PathBuf;use std::sync::Arc; #[derive(Debug, PartialEq, Eq, Hash, Clone)]pub(crate) enum UriOrPath {    Uri(SharedUri),    Path(Arc<PathBuf>),    Embedded(SharedString),} impl From<SharedUri> for UriOrPath {    fn from(value: SharedUri) -> Self {        Self::Uri(value)    }} impl From<Arc<PathBuf>> for UriOrPath {    fn from(value: Arc<PathBuf>) -> Self {        Self::Path(value)    }} /// A trait for asynchronous asset loading.pub trait Asset {    /// The source of the asset.    type Source: Clone + Hash + Send;     /// The loaded asset    type Output: Clone + Send;     /// Load the asset asynchronously    fn load(        source: Self::Source,        cx: &mut AppContext,    ) -> impl Future<Output = Self::Output> + Send + 'static;} /// Use a quick, non-cryptographically secure hash function to get an identifier from datapub fn hash<T: Hash>(data: &T) -> u64 {    let mut hasher = collections::FxHasher::default();    data.hash(&mut hasher);    hasher.finish()}