camel_component_validator/
resolver.rs1use camel_component_api::CamelError;
6
7pub trait ResourceResolver: Send + Sync {
13 fn resolve(&self, path: &str) -> Result<Vec<u8>, CamelError>;
15}
16
17pub struct FilesystemResolver;
19
20impl ResourceResolver for FilesystemResolver {
21 fn resolve(&self, path: &str) -> Result<Vec<u8>, CamelError> {
22 std::fs::read(path).map_err(|e| {
23 CamelError::EndpointCreationFailed(format!("failed to read schema file '{path}': {e}"))
24 })
25 }
26}
27
28#[cfg(test)]
29mod tests {
30 use super::*;
31
32 #[test]
33 fn filesystem_resolver_reads_existing_file() {
34 let mut f = tempfile::Builder::new().suffix(".json").tempfile().unwrap();
35 use std::io::Write;
36 f.write_all(b"hello").unwrap();
37 let resolver = FilesystemResolver;
38 let data = resolver.resolve(f.path().to_str().unwrap()).unwrap();
39 assert_eq!(data, b"hello");
40 }
41
42 #[test]
43 fn filesystem_resolver_errors_on_missing_file() {
44 let resolver = FilesystemResolver;
45 let result = resolver.resolve("/nonexistent/file.json");
46 assert!(result.is_err());
47 }
48}