File tree Expand file tree Collapse file tree 2 files changed +20
-5
lines changed Expand file tree Collapse file tree 2 files changed +20
-5
lines changed Original file line number Diff line number Diff line change 3535from  dataclasses  import  dataclass 
3636from  enum  import  Enum 
3737from  typing  import  TYPE_CHECKING , ClassVar 
38+ import  json 
3839
3940import  zstd 
4041
@@ -53,13 +54,19 @@ def make_envelope(package: Package, config: EnvelopeConfig) -> bytes:
5354    payload : bytes 
5455    match  config .format :
5556        case  EnvelopeFormat .JSON :
56-             json  =  package ._to_serial ().model_dump_json ()
57+             json_str  =  package ._to_serial ().model_dump_json ()
5758            # This introduces an extra encode/decode roundtrip when calling 
5859            # `make_envelope_str`, but we prioritize speed for binary formats. 
59-             payload  =  json .encode ("utf-8" )
60-         case  EnvelopeFormat .MODULE  |  EnvelopeFormat .MODULE_WITH_EXTS :
61-             msg  =  "MODULE encoding of HUGR envelopes is not supported yet." 
62-             raise  ValueError (msg )
60+             payload  =  json_str .encode ("utf-8" )
61+ 
62+         case  EnvelopeFormat .MODULE :
63+             return  bytes (package .to_model ())
64+ 
65+         case  EnvelopeFormat .MODULE_WITH_EXTS :
66+             package_bytes  =  bytes (package .to_model ())
67+             extension_str  =  json .dumps ([ext .model_dump () for  ext  in  package .extensions ])
68+             extension_bytes  =  extension_str .encode ("utf8" )
69+             return  package_bytes  +  extension_bytes 
6370
6471    if  config .zstd  is  not   None :
6572        payload  =  zstd .compress (payload , config .zstd )
Original file line number Diff line number Diff line change @@ -25,6 +25,7 @@ def _deprecated(func):
2525    read_envelope_str ,
2626)
2727from  hugr .ops  import  FuncDecl , FuncDefn , Op 
28+ import  hugr .model  as  model 
2829
2930if  TYPE_CHECKING :
3031    from  hugr .ext  import  Extension 
@@ -127,6 +128,13 @@ def from_json(cls, json_str: str) -> Package:
127128        """ 
128129        return  ext_s .Package .model_validate_json (json_str ).deserialize ()
129130
131+     def  to_model (self ) ->  model .Package :
132+         """Export the package as its hugr model representation. 
133+ 
134+         At the moment this does not yet contain the extensions. 
135+         """ 
136+         return  model .Package ([module .to_model () for  module  in  self .modules ])
137+ 
130138
131139@dataclass (frozen = True ) 
132140class  PackagePointer :
    
 
   
 
     
   
   
          
     
  
    
     
 
    
      
     
 
     
    You can’t perform that action at this time.
  
 
    
  
     
    
      
        
     
 
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments