@@ -36,8 +36,12 @@ pub const VALID_PRINT: &str = "HUGR valid!";
36
36
37
37
impl ValArgs {
38
38
/// Run the HUGR cli and validate against an extension registry.
39
- pub fn run ( & mut self ) -> Result < Vec < Hugr > , CliError > {
40
- self . hugr_args . validate ( )
39
+ pub fn run ( & mut self ) -> Result < ( Vec < Hugr > , ExtensionRegistry ) , CliError > {
40
+ let result = self . hugr_args . validate ( ) ?;
41
+ if self . verbosity ( Level :: Info ) {
42
+ eprintln ! ( "{}" , VALID_PRINT ) ;
43
+ }
44
+ Ok ( result)
41
45
}
42
46
43
47
/// Test whether a `level` message should be output.
@@ -46,39 +50,49 @@ impl ValArgs {
46
50
}
47
51
}
48
52
53
+ impl Package {
54
+ /// Validate the package against an extension registry.
55
+ ///
56
+ /// `reg` is updated with any new extensions.
57
+ ///
58
+ /// Returns the validated modules.
59
+ pub fn validate ( mut self , reg : & mut ExtensionRegistry ) -> Result < Vec < Hugr > , ValError > {
60
+ // register packed extensions
61
+ for ext in self . extensions {
62
+ reg. register_updated ( ext) ?;
63
+ }
64
+
65
+ for hugr in self . modules . iter_mut ( ) {
66
+ hugr. update_validate ( reg) ?;
67
+ }
68
+
69
+ Ok ( self . modules )
70
+ }
71
+ }
72
+
49
73
impl HugrArgs {
50
74
/// Load the package and validate against an extension registry.
51
- pub fn validate ( & mut self ) -> Result < Vec < Hugr > , CliError > {
52
- let Package {
53
- mut modules ,
54
- extensions : packed_exts ,
55
- } = self . get_package ( ) ?;
75
+ ///
76
+ /// Returns the validated modules and the extension registry the modules
77
+ /// were validated against.
78
+ pub fn validate ( & mut self ) -> Result < ( Vec < Hugr > , ExtensionRegistry ) , CliError > {
79
+ let package = self . get_package ( ) ?;
56
80
57
81
let mut reg: ExtensionRegistry = if self . no_std {
58
82
hugr_core:: extension:: PRELUDE_REGISTRY . to_owned ( )
59
83
} else {
60
84
hugr_core:: std_extensions:: STD_REG . to_owned ( )
61
85
} ;
62
86
63
- // register packed extensions
64
- for ext in packed_exts {
65
- reg. register_updated ( ext) . map_err ( ValError :: ExtReg ) ?;
66
- }
67
-
68
87
// register external extensions
69
88
for ext in & self . extensions {
70
89
let f = std:: fs:: File :: open ( ext) ?;
71
90
let ext: Extension = serde_json:: from_reader ( f) ?;
72
91
reg. register_updated ( ext) . map_err ( ValError :: ExtReg ) ?;
73
92
}
74
93
75
- for hugr in modules. iter_mut ( ) {
76
- hugr. update_validate ( & reg) . map_err ( ValError :: Validate ) ?;
77
- if self . verbosity ( Level :: Info ) {
78
- eprintln ! ( "{}" , VALID_PRINT ) ;
79
- }
80
- }
81
- Ok ( modules)
94
+ let modules = package. validate ( & mut reg) ?;
95
+ Ok ( ( modules, reg) )
82
96
}
83
97
84
98
/// Test whether a `level` message should be output.
0 commit comments