summaryrefslogtreecommitdiff
path: root/dhall/src
diff options
context:
space:
mode:
Diffstat (limited to 'dhall/src')
-rw-r--r--dhall/src/phase/binary.rs24
-rw-r--r--dhall/src/phase/typecheck.rs4
2 files changed, 14 insertions, 14 deletions
diff --git a/dhall/src/phase/binary.rs b/dhall/src/phase/binary.rs
index 96eaa6c..1812131 100644
--- a/dhall/src/phase/binary.rs
+++ b/dhall/src/phase/binary.rs
@@ -196,17 +196,15 @@ fn cbor_value_to_dhall(
};
let hash = match hash {
Null => None,
- Array(vec) => match vec.as_slice() {
- [String(protocol), String(hash)] => Some(Hash {
- protocol: protocol.clone(),
- hash: hash.clone(),
- }),
- _ => Err(DecodeError::WrongFormatError(
- "import/hash".to_owned(),
- ))?,
+ Bytes(bytes) => match bytes.as_slice() {
+ [18, 32, rest..] => Some(Hash::SHA256(rest.to_vec())),
+ _ => Err(DecodeError::WrongFormatError(format!(
+ "import/hash/unknown_multihash: {:?}",
+ bytes
+ )))?,
},
_ => Err(DecodeError::WrongFormatError(
- "import/hash".to_owned(),
+ "import/hash/should_be_bytes".to_owned(),
))?,
};
let mut rest = rest.iter();
@@ -518,7 +516,7 @@ fn serialize_import<S>(ser: S, import: &Import) -> Result<S::Ok, S::Error>
where
S: serde::ser::Serializer,
{
- use cbor::Value::{Array, Null, String, U64};
+ use cbor::Value::{Bytes, Null, U64};
use serde::ser::SerializeSeq;
let count = 4 + match &import.location_hashed.location {
@@ -533,8 +531,10 @@ where
let hash = match &import.location_hashed.hash {
None => Null,
- Some(h) => {
- Array(vec![String(h.protocol.clone()), String(h.hash.clone())])
+ Some(Hash::SHA256(h)) => {
+ let mut bytes = vec![18, 32];
+ bytes.extend_from_slice(h);
+ Bytes(bytes)
}
};
ser_seq.serialize_element(&hash)?;
diff --git a/dhall/src/phase/typecheck.rs b/dhall/src/phase/typecheck.rs
index 11d6c7a..53ad99b 100644
--- a/dhall/src/phase/typecheck.rs
+++ b/dhall/src/phase/typecheck.rs
@@ -1118,7 +1118,6 @@ mod spec_tests {
tc_success!(tc_success_recordOfTypes, "recordOfTypes");
// tc_success!(tc_success_simple_access_0, "simple/access/0");
// tc_success!(tc_success_simple_access_1, "simple/access/1");
- // tc_success!(tc_success_simple_alternativesAreTypes, "simple/alternativesAreTypes");
// tc_success!(tc_success_simple_anonymousFunctionsInTypes, "simple/anonymousFunctionsInTypes");
// tc_success!(tc_success_simple_fieldsAreTypes, "simple/fieldsAreTypes");
// tc_success!(tc_success_simple_kindParameter, "simple/kindParameter");
@@ -1248,6 +1247,7 @@ mod spec_tests {
ti_success!(ti_success_unit_ListReverse, "unit/ListReverse");
ti_success!(ti_success_unit_MergeEmptyUnion, "unit/MergeEmptyUnion");
ti_success!(ti_success_unit_MergeOne, "unit/MergeOne");
+ ti_success!(ti_success_unit_MergeOneEmpty, "unit/MergeOneEmpty");
ti_success!(ti_success_unit_MergeOneWithAnnotation, "unit/MergeOneWithAnnotation");
ti_success!(ti_success_unit_Natural, "unit/Natural");
ti_success!(ti_success_unit_NaturalBuild, "unit/NaturalBuild");
@@ -1334,7 +1334,7 @@ mod spec_tests {
ti_success!(ti_success_unit_TypeAnnotationSort, "unit/TypeAnnotationSort");
ti_success!(ti_success_unit_UnionConstructorEmptyField, "unit/UnionConstructorEmptyField");
ti_success!(ti_success_unit_UnionConstructorField, "unit/UnionConstructorField");
- ti_success!(ti_success_unit_UnionOne, "unit/UnionOne");
+ ti_success!(ti_success_unit_UnionLiteralOne, "unit/UnionLiteralOne");
ti_success!(ti_success_unit_UnionTypeEmpty, "unit/UnionTypeEmpty");
ti_success!(ti_success_unit_UnionTypeKind, "unit/UnionTypeKind");
ti_success!(ti_success_unit_UnionTypeOne, "unit/UnionTypeOne");