diff --git a/crates/cli/src/meta/types/dotrain/order_builder_state_v1.rs b/crates/cli/src/meta/types/dotrain/order_builder_state_v1.rs index 03faac8a..4567f7a7 100644 --- a/crates/cli/src/meta/types/dotrain/order_builder_state_v1.rs +++ b/crates/cli/src/meta/types/dotrain/order_builder_state_v1.rs @@ -142,8 +142,7 @@ impl TryFrom for OrderBuilderStateV1 { )); } - // Deserialize CBOR from payload - let instance = serde_cbor::from_slice::(&value.payload) + let instance = serde_cbor::from_slice::(&value.unpack()?) .map_err(Error::SerdeCborError)?; Ok(instance) @@ -401,6 +400,23 @@ mod tests { } } + #[test] + fn test_try_from_unpacks_content_encoding() { + let instance = create_test_instance(); + let cbor_bytes = serde_cbor::to_vec(&instance).unwrap(); + let document_item = RainMetaDocumentV1Item { + payload: serde_bytes::ByteBuf::from(ContentEncoding::Deflate.encode(&cbor_bytes)), + magic: KnownMagic::OrderBuilderStateV1, + content_type: ContentType::OctetStream, + content_encoding: ContentEncoding::Deflate, + content_language: ContentLanguage::None, + schema: None, + }; + + let recovered = OrderBuilderStateV1::try_from(document_item).unwrap(); + assert_eq!(recovered, instance); + } + /// A document carrying `leaf` under `depth` items that claim the document /// magic as their own. fn nest_document(leaf: RainMetaDocumentV1Item, depth: usize) -> Vec { diff --git a/crates/cli/src/meta/types/dotrain/source_v1.rs b/crates/cli/src/meta/types/dotrain/source_v1.rs index c8ece2b5..bf6929ad 100644 --- a/crates/cli/src/meta/types/dotrain/source_v1.rs +++ b/crates/cli/src/meta/types/dotrain/source_v1.rs @@ -111,7 +111,7 @@ impl TryFrom for DotrainSourceV1 { value.magic, )); } - let content = String::from_utf8(value.payload.to_vec()).map_err(Error::FromUtf8Error)?; + let content = String::from_utf8(value.unpack()?).map_err(Error::FromUtf8Error)?; Ok(DotrainSourceV1(content)) } } @@ -771,4 +771,22 @@ mod tests { } mock.assert(); } + + #[test] + fn test_try_from_unpacks_content_encoding() { + let dotrain_code = "/* some dotrain code */".to_string(); + let document_item = RainMetaDocumentV1Item { + payload: serde_bytes::ByteBuf::from( + ContentEncoding::Deflate.encode(dotrain_code.as_bytes()), + ), + magic: KnownMagic::DotrainSourceV1, + content_type: ContentType::OctetStream, + content_encoding: ContentEncoding::Deflate, + content_language: ContentLanguage::None, + schema: None, + }; + + let dotrain_source = DotrainSourceV1::try_from(document_item).unwrap(); + assert_eq!(dotrain_source.0, dotrain_code); + } }