generated from ewpratten/rust-template
/
resolver.rs
48 lines (39 loc) · 1.56 KB
/
resolver.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
//! This module contains the main code revolving around the resolver mechanism
use std::path::{PathBuf, Path};
/// The asset resolver trait. This should be implemented by any custom resolvers
pub trait AssetResolver {
/// Resolve a path to an asset.
///
/// The incoming path could be in any format. If it can be
/// resolved by the implementer, it should return `Some(PathBuf)`.
/// Otherwise, it should return `None`.
///
/// Additional mechanisms may handle chaining resolvers to handle multiple
/// path formats, so don't worry about catching every case in one resolver.
fn resolve(&self, path: &str) -> Option<PathBuf>;
}
/// The default resolver. This simply parses path strings using `Path::new()`
pub struct DefaultResolver;
impl AssetResolver for DefaultResolver {
/// Directly resolves paths using Rust's built-in
/// [`Path`](https://doc.rust-lang.org/std/path/struct.Path.html) type.
///
/// # Example
/// ```
/// # use asset_resolver::{AssetResolver, DefaultResolver};
/// let resolver = DefaultResolver;
/// let path = resolver.resolve("/home/user/assets/test.png").unwrap();
/// assert_eq!(path.to_str().unwrap(), "/home/user/assets/test.png");
/// ```
fn resolve(&self, path: &str) -> Option<PathBuf> {
Path::new(path).to_owned().into()
}
}
/// A resolver that always returns `None`.
pub struct NullResolver;
impl AssetResolver for NullResolver {
/// Does not resolve paths. Just returns `None`.
fn resolve(&self, _path: &str) -> Option<PathBuf> {
None
}
}