summaryrefslogtreecommitdiff
path: root/src/loading/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/loading/mod.rs')
-rw-r--r--src/loading/mod.rs16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/loading/mod.rs b/src/loading/mod.rs
index 3be74428..64a65580 100644
--- a/src/loading/mod.rs
+++ b/src/loading/mod.rs
@@ -6,6 +6,7 @@ mod fs;
#[cfg(feature = "fs")]
pub use fs::*;
+use std::io;
use std::path::Path;
use serde::{Deserialize, Serialize};
@@ -21,10 +22,13 @@ pub trait Loader {
///
/// This should return the same id for all paths pointing to the same file
/// and `None` if the file does not exist.
- fn resolve_from(&self, base: FileId, path: &Path) -> Option<FileId>;
+ fn resolve_from(&self, base: FileId, path: &Path) -> io::Result<FileId>;
/// Load a file by id.
- fn load_file(&self, id: FileId) -> Option<Vec<u8>>;
+ ///
+ /// This must only be called with an `id` returned by a call to this
+ /// loader's `resolve_from` method.
+ fn load_file(&self, id: FileId) -> io::Result<Vec<u8>>;
}
/// A file id that can be [resolved](Loader::resolve_from) from a path.
@@ -53,11 +57,11 @@ impl Loader for BlankLoader {
&[]
}
- fn resolve_from(&self, _: FileId, _: &Path) -> Option<FileId> {
- None
+ fn resolve_from(&self, _: FileId, _: &Path) -> io::Result<FileId> {
+ Err(io::ErrorKind::NotFound.into())
}
- fn load_file(&self, _: FileId) -> Option<Vec<u8>> {
- None
+ fn load_file(&self, _: FileId) -> io::Result<Vec<u8>> {
+ panic!("resolve_from never returns an id")
}
}