3434//! - Bit 7,6: Constant "01" to make some headers ascii-printable.
3535//!
3636
37+ #![ allow( deprecated) ]
38+ // TODO: Due to a bug in `derive_more`
39+ // (https://github.com/JelteF/derive_more/issues/419) we need to deactivate
40+ // deprecation warnings here. We can reactivate them once the bug is fixed by
41+ // https://github.com/JelteF/derive_more/pull/454.
42+
3743mod header;
3844
3945pub use header:: { EnvelopeConfig , EnvelopeFormat , ZstdConfig , MAGIC_NUMBERS } ;
@@ -161,9 +167,11 @@ pub enum EnvelopeError {
161167 ZstdUnsupported ,
162168 /// Tried to encode a package with multiple HUGRs, when only 1 was expected.
163169 #[ display(
164- "Packages with multiple HUGRs are currently unsupported. Tried to encode {count} HUGRs, when 1 was expected."
165- ) ]
170+ "Packages with multiple HUGRs are currently unsupported. Tried to encode {count} HUGRs, when 1 was expected."
171+ ) ]
166172 #[ from( ignore) ]
173+ /// Deprecated: Packages with multiple HUGRs is a legacy feature that is no longer supported.
174+ #[ deprecated( since = "0.15.2" , note = "Multiple HUGRs are supported via packages." ) ]
167175 MultipleHugrs {
168176 /// The number of HUGRs in the package.
169177 count : usize ,
@@ -244,7 +252,7 @@ fn decode_model(
244252 extension_registry : & ExtensionRegistry ,
245253 format : EnvelopeFormat ,
246254) -> Result < Package , EnvelopeError > {
247- use crate :: { import:: import_hugr , Extension } ;
255+ use crate :: { import:: import_package , Extension } ;
248256 use hugr_model:: v0:: bumpalo:: Bump ;
249257
250258 if format. model_version ( ) != Some ( 0 ) {
@@ -255,7 +263,7 @@ fn decode_model(
255263 }
256264
257265 let bump = Bump :: default ( ) ;
258- let module_list = hugr_model:: v0:: binary:: read_from_reader ( & mut stream, & bump) ?;
266+ let model_package = hugr_model:: v0:: binary:: read_from_reader ( & mut stream, & bump) ?;
259267
260268 let mut extension_registry = extension_registry. clone ( ) ;
261269 if format. append_extensions ( ) {
@@ -266,9 +274,7 @@ fn decode_model(
266274 }
267275 }
268276
269- // TODO: Import multiple hugrs from the model?
270- let hugr = import_hugr ( & module_list, & extension_registry) ?;
271- Ok ( Package :: new ( [ hugr] ) ?)
277+ Ok ( import_package ( & model_package, & extension_registry) ?)
272278}
273279
274280/// Internal implementation of [`write_envelope`] to call with/without the zstd compression wrapper.
@@ -301,25 +307,20 @@ fn encode_model(
301307 package : & Package ,
302308 format : EnvelopeFormat ,
303309) -> Result < ( ) , EnvelopeError > {
304- use crate :: export:: export_hugr;
305310 use hugr_model:: v0:: { binary:: write_to_writer, bumpalo:: Bump } ;
306311
312+ use crate :: export:: export_package;
313+
307314 if format. model_version ( ) != Some ( 0 ) {
308315 return Err ( EnvelopeError :: FormatUnsupported {
309316 format,
310317 feature : None ,
311318 } ) ;
312319 }
313320
314- // TODO: Export multiple hugrs to the model?
315- if package. modules . len ( ) != 1 {
316- return Err ( EnvelopeError :: MultipleHugrs {
317- count : package. modules . len ( ) ,
318- } ) ;
319- }
320321 let bump = Bump :: default ( ) ;
321- let module = export_hugr ( & package. modules [ 0 ] , & bump) ;
322- write_to_writer ( & module , & mut writer) ?;
322+ let model_package = export_package ( package, & bump) ;
323+ write_to_writer ( & model_package , & mut writer) ?;
323324
324325 if format. append_extensions ( ) {
325326 serde_json:: to_writer ( writer, & package. extensions . iter ( ) . collect_vec ( ) ) ?;
0 commit comments