git.delta.rocks / jrsonnet / refs/commits / 12f7f36efab6

difftreelog

feat(evaluator) import resolver as_any method

Лач2020-06-28parent: #af49e24.patch.diff
in: master

1 file changed

modifiedcrates/jrsonnet-evaluator/src/import.rsdiffbeforeafterboth
6use fs::File;6use fs::File;
7use std::fs;7use std::fs;
8use std::io::Read;8use std::io::Read;
9use std::{cell::RefCell, collections::HashMap, path::PathBuf, rc::Rc};9use std::{any::Any, cell::RefCell, collections::HashMap, path::PathBuf, rc::Rc};
1010
11pub trait ImportResolver {11pub trait ImportResolver {
12 fn resolve_file(&self, from: &PathBuf, path: &PathBuf) -> Result<Rc<PathBuf>>;12 fn resolve_file(&self, from: &PathBuf, path: &PathBuf) -> Result<Rc<PathBuf>>;
13 fn load_file_contents(&self, resolved: &PathBuf) -> Result<Rc<str>>;13 fn load_file_contents(&self, resolved: &PathBuf) -> Result<Rc<str>>;
14 unsafe fn as_any(&self) -> &dyn Any;
14}15}
1516
16pub struct DummyImportResolver;17pub struct DummyImportResolver;
22 // Can be only caused by library direct consumer, not by supplied jsonnet23 // Can be only caused by library direct consumer, not by supplied jsonnet
23 panic!("dummy resolver can't load any file")24 panic!("dummy resolver can't load any file")
24 }25 }
26 unsafe fn as_any(&self) -> &dyn Any {
27 panic!("this resolver can't be used as any")
28 }
25}29}
26impl Default for Box<dyn ImportResolver> {30impl Default for Box<dyn ImportResolver> {
27 fn default() -> Self {31 fn default() -> Self {
57 .map_err(|_e| create_error(Error::ImportBadFileUtf8(id.clone())))?;61 .map_err(|_e| create_error(Error::ImportBadFileUtf8(id.clone())))?;
58 Ok(out.into())62 Ok(out.into())
59 }63 }
64 unsafe fn as_any(&self) -> &dyn Any {
65 panic!("this resolver can't be used as any")
66 }
60}67}
6168
62type ResolutionData = (PathBuf, PathBuf);69type ResolutionData = (PathBuf, PathBuf);
80 .or_insert_with(|| self.inner.load_file_contents(resolved))87 .or_insert_with(|| self.inner.load_file_contents(resolved))
81 .clone()88 .clone()
82 }89 }
90 unsafe fn as_any(&self) -> &dyn Any {
91 panic!("this resolver can't be used as any")
92 }
83}93}
8494