summaryrefslogtreecommitdiff
path: root/dhall/src/semantics/phase/parse.rs
diff options
context:
space:
mode:
authorNadrieril Feneanar2019-12-19 21:33:26 +0000
committerGitHub2019-12-19 21:33:26 +0000
commit91ef0cf697d56c91a8d15937aa4669dc221cd6c1 (patch)
treed3f00cf31d4386b82c6fb09eda3f690415dd8902 /dhall/src/semantics/phase/parse.rs
parent3f00e4ca3fe22f88a1d0633e254df0bff781c6d3 (diff)
parent1e4f15d1891b497ecf6632432bc9252dc6a4507d (diff)
Merge pull request #117 from Nadrieril/merge-crates
Merge a bunch of sub-crates
Diffstat (limited to 'dhall/src/semantics/phase/parse.rs')
-rw-r--r--dhall/src/semantics/phase/parse.rs37
1 files changed, 37 insertions, 0 deletions
diff --git a/dhall/src/semantics/phase/parse.rs b/dhall/src/semantics/phase/parse.rs
new file mode 100644
index 0000000..4c8ad7b
--- /dev/null
+++ b/dhall/src/semantics/phase/parse.rs
@@ -0,0 +1,37 @@
+use std::fs::File;
+use std::io::Read;
+use std::path::Path;
+
+use crate::semantics::error::Error;
+use crate::semantics::phase::resolve::ImportRoot;
+use crate::semantics::phase::Parsed;
+use crate::syntax::binary;
+use crate::syntax::parse_expr;
+
+pub(crate) fn parse_file(f: &Path) -> Result<Parsed, Error> {
+ let mut buffer = String::new();
+ File::open(f)?.read_to_string(&mut buffer)?;
+ let expr = parse_expr(&*buffer)?;
+ let root = ImportRoot::LocalDir(f.parent().unwrap().to_owned());
+ Ok(Parsed(expr, root))
+}
+
+pub(crate) fn parse_str(s: &str) -> Result<Parsed, Error> {
+ let expr = parse_expr(s)?;
+ let root = ImportRoot::LocalDir(std::env::current_dir()?);
+ Ok(Parsed(expr, root))
+}
+
+pub(crate) fn parse_binary(data: &[u8]) -> Result<Parsed, Error> {
+ let expr = binary::decode(data)?;
+ let root = ImportRoot::LocalDir(std::env::current_dir()?);
+ Ok(Parsed(expr, root))
+}
+
+pub(crate) fn parse_binary_file(f: &Path) -> Result<Parsed, Error> {
+ let mut buffer = Vec::new();
+ File::open(f)?.read_to_end(&mut buffer)?;
+ let expr = binary::decode(&buffer)?;
+ let root = ImportRoot::LocalDir(f.parent().unwrap().to_owned());
+ Ok(Parsed(expr, root))
+}