diff options
Diffstat (limited to 'dhall')
| -rw-r--r-- | dhall/src/phase/.resolve.rs.swp | bin | 0 -> 16384 bytes | |||
| -rw-r--r-- | dhall/src/phase/binary.rs | 21 | ||||
| -rw-r--r-- | dhall/src/phase/resolve.rs | 11 | 
3 files changed, 18 insertions, 14 deletions
diff --git a/dhall/src/phase/.resolve.rs.swp b/dhall/src/phase/.resolve.rs.swp Binary files differnew file mode 100644 index 0000000..5314300 --- /dev/null +++ b/dhall/src/phase/.resolve.rs.swp diff --git a/dhall/src/phase/binary.rs b/dhall/src/phase/binary.rs index 40219d9..16e7ce9 100644 --- a/dhall/src/phase/binary.rs +++ b/dhall/src/phase/binary.rs @@ -1,11 +1,12 @@  use itertools::Itertools;  use serde_cbor::value::value as cbor;  use std::iter::FromIterator; +use std::vec;  use dhall_syntax::map::DupTreeMap;  use dhall_syntax::{      rc, Expr, ExprF, FilePrefix, Hash, Import, ImportLocation, ImportMode, -    Integer, InterpolatedText, Label, Natural, Scheme, URL, V, +    Integer, InterpolatedText, Label, Natural, Scheme, URL, V, File  };  use crate::error::{DecodeError, EncodeError}; @@ -278,7 +279,7 @@ fn cbor_value_to_dhall(data: &cbor::Value) -> Result<DecodedExpr, DecodeError> {                                  "import/remote/query".to_owned(),                              ))?,                          }; -                        let path = rest +                        let file_path: Vec<_> = rest                              .map(|s| match s.as_string() {                                  Some(s) => Ok(s.clone()),                                  None => Err(DecodeError::WrongFormatError( @@ -286,6 +287,7 @@ fn cbor_value_to_dhall(data: &cbor::Value) -> Result<DecodedExpr, DecodeError> {                                  )),                              })                              .collect::<Result<_, _>>()?; +                        let path = File { file_path };                          ImportLocation::Remote(URL {                              scheme,                              authority, @@ -304,7 +306,7 @@ fn cbor_value_to_dhall(data: &cbor::Value) -> Result<DecodedExpr, DecodeError> {                                  "import/local/prefix".to_owned(),                              ))?,                          }; -                        let path = rest +                        let file_path: Vec<_> = rest                              .map(|s| match s.as_string() {                                  Some(s) => Ok(s.clone()),                                  None => Err(DecodeError::WrongFormatError( @@ -312,6 +314,7 @@ fn cbor_value_to_dhall(data: &cbor::Value) -> Result<DecodedExpr, DecodeError> {                                  )),                              })                              .collect::<Result<_, _>>()?; +                        let path = File { file_path };                          ImportLocation::Local(prefix, path)                      }                      6 => { @@ -584,8 +587,8 @@ where      use serde::ser::SerializeSeq;      let count = 4 + match &import.location { -        ImportLocation::Remote(url) => 3 + url.path.len(), -        ImportLocation::Local(_, path) => path.len(), +        ImportLocation::Remote(url) => 3 + url.path.file_path.len(), +        ImportLocation::Local(_, path) => path.file_path.len(),          ImportLocation::Env(_) => 1,          ImportLocation::Missing => 0,      }; @@ -635,8 +638,8 @@ where                  }              };              ser_seq.serialize_element(&url.authority)?; -            for p in &url.path { -                ser_seq.serialize_element(p)?; +            for p in url.path.file_path.iter() { +                ser_seq.serialize_element(&p)?;              }              match &url.query {                  None => ser_seq.serialize_element(&Null)?, @@ -644,8 +647,8 @@ where              };          }          ImportLocation::Local(_, path) => { -            for p in path { -                ser_seq.serialize_element(p)?; +            for p in path.file_path.iter() { +                ser_seq.serialize_element(&p)?;              }          }          ImportLocation::Env(env) => { diff --git a/dhall/src/phase/resolve.rs b/dhall/src/phase/resolve.rs index a58f5e4..5bde68a 100644 --- a/dhall/src/phase/resolve.rs +++ b/dhall/src/phase/resolve.rs @@ -16,6 +16,7 @@ type ImportCache = HashMap<Import, Normalized>;  pub(crate) type ImportStack = Vec<Import>; +  fn resolve_import(      import: &Import,      root: &ImportRoot, @@ -30,14 +31,14 @@ fn resolve_import(      };      match &import.location {          Local(prefix, path) => { -            let path: PathBuf = path.iter().cloned().collect(); -            let path = match prefix { +            let path_buf: PathBuf = path.file_path.iter().collect(); +            let path_buf = match prefix {                  // TODO: fail gracefully -                Parent => cwd.parent().unwrap().join(path), -                Here => cwd.join(path), +                Parent => cwd.parent().unwrap().join(path_buf), +                Here => cwd.join(path_buf),                  _ => unimplemented!("{:?}", import),              }; -            Ok(load_import(&path, import_cache, import_stack).map_err(|e| { +            Ok(load_import(&path_buf, import_cache, import_stack).map_err(|e| {                  ImportError::Recursive(import.clone(), Box::new(e))              })?)          }  | 
