c2pa-rs

A fork of https://github.com/contentauth/c2pa-rs/
git clone git://archive.git.mtrnord.blog/mtrnords-photography-manager/c2pa-rs.git
Log | Files | Refs | README

commit ea8bc5d8103513019b1111b1b95a9cdcbfcd7ce3
parent c6cdd489dbf6ba6f2ca366076db5b96e179f03fd
Author: MTRNord <mtrnord1@gmail.com>
Date:   Sun, 23 Jun 2024 15:59:05 +0200

Fix unstable_api related bugs

Diffstat:
Msdk/src/builder.rs | 30+++++++++++++++++-------------
1 file changed, 17 insertions(+), 13 deletions(-)

diff --git a/sdk/src/builder.rs b/sdk/src/builder.rs @@ -17,22 +17,22 @@ use std::{ }; use async_generic::async_generic; -use serde::{Deserialize, Serialize}; +use serde::{de::DeserializeOwned, Deserialize, Serialize}; use serde_with::skip_serializing_none; use uuid::Uuid; use zip::{write::FileOptions, ZipArchive, ZipWriter}; use crate::{ - assertion::AssertionBase, - assertions::{labels, Actions, CreativeWork, Exif, SoftwareAgent, Thumbnail, User, UserCbor}, + assertion::{AssertionBase, AssertionDecodeError}, + assertions::{Actions, CreativeWork, Exif, labels, SoftwareAgent, Thumbnail, User, UserCbor}, + AsyncSigner, claim::Claim, + ClaimGeneratorInfo, error::{Error, Result}, ingredient::Ingredient, resource_store::{ResourceRef, ResourceResolver, ResourceStore}, salt::DefaultSalt, - store::Store, - utils::mime::format_to_mime, - AsyncSigner, ClaimGeneratorInfo, Signer, + Signer, store::Store, utils::mime::format_to_mime, }; /// A Manifest Definition @@ -108,9 +108,6 @@ pub struct AssertionDefinition { pub data: AssertionData, } -use serde::de::DeserializeOwned; - -use crate::assertion::AssertionDecodeError; impl AssertionDefinition { pub(crate) fn to_assertion<T: DeserializeOwned>(&self) -> Result<T> { match &self.data { @@ -359,12 +356,15 @@ impl Builder { /// * `stream` - A stream to write the zip into. /// # Errors /// * If the archive cannot be written. - pub fn to_archive(&mut self, stream: impl Write + Seek) -> Result<()> { + pub fn to_archive<T: zip::write::FileOptionExtension + std::marker::Copy>( + &mut self, + stream: impl Write + Seek, + ) -> Result<()> { drop( // this drop seems to be required to force a flush before reading back. { let mut zip = ZipWriter::new(stream); - let options = + let options: FileOptions<'_, T> = FileOptions::default().compression_method(zip::CompressionMethod::Stored); zip.start_file("manifest.json", options) .map_err(|e| Error::OtherError(Box::new(e)))?; @@ -673,7 +673,7 @@ impl Builder { { stream.rewind()?; self.resources - .add(&self.definition.instance_id.clone(), image)?; + .add(self.definition.instance_id.clone(), image)?; self.definition.thumbnail = Some(ResourceRef::new( format, self.definition.instance_id.clone(), @@ -780,14 +780,18 @@ impl Builder { mod tests { #![allow(clippy::expect_used)] #![allow(clippy::unwrap_used)] + use std::io::Cursor; use serde_json::json; + #[cfg(target_arch = "wasm32")] use wasm_bindgen_test::*; + use crate::{Reader, utils::test::temp_signer}; + use super::*; - use crate::{utils::test::temp_signer, Reader}; + #[cfg(target_arch = "wasm32")] wasm_bindgen_test::wasm_bindgen_test_configure!(run_in_browser);