@@ -64,7 +64,7 @@ impl hyperpuzzlescript::EngineCallback<Puzzle> for HpsNdEuclid {
6464 . build_blocking (
6565 & CatalogId :: from_str ( color_system_id) . map_err ( |e| eyre ! ( "{e}" ) ) ?,
6666 )
67- . map_err ( |e| eyre ! ( "{e:#}" ) ) // cursed reformatting of eyre::Report
67+ . map_err ( |e| clone_eyre ( & e ) )
6868 . wrap_err ( "error building color system" ) ?;
6969 builder. shape ( ) . lock ( ) . colors = ColorSystemBuilder :: unbuild ( & colors) ?;
7070 }
@@ -77,7 +77,7 @@ impl hyperpuzzlescript::EngineCallback<Puzzle> for HpsNdEuclid {
7777 . build_blocking (
7878 & CatalogId :: from_str ( twist_system_id) . map_err ( |e| eyre ! ( "{e}" ) ) ?,
7979 )
80- . map_err ( |e| eyre ! ( "{e:#}" ) ) // cursed reformatting of eyre::Report
80+ . map_err ( |e| clone_eyre ( & e ) )
8181 . wrap_err ( "error building twist system" ) ?;
8282 * builder. twists ( ) . lock ( ) = TwistSystemBuilder :: unbuild ( & twists) ?;
8383 }
@@ -113,8 +113,9 @@ impl hyperpuzzlescript::EngineCallback<Puzzle> for HpsNdEuclid {
113113 build_fn
114114 . call ( build_span, & mut ctx, vec ! [ ] , Map :: new ( ) )
115115 . map_err ( |e| {
116- ctx. runtime . report_diagnostic ( e) ;
117- eyre ! ( "unable to build puzzle `{id}`; see HPS logs" )
116+ ctx. runtime
117+ . report_and_convert_to_eyre ( e)
118+ . wrap_err ( "error building puzzle" )
118119 } ) ?;
119120
120121 let b = builder. lock ( ) ;
@@ -128,3 +129,12 @@ impl hyperpuzzlescript::EngineCallback<Puzzle> for HpsNdEuclid {
128129 } )
129130 }
130131}
132+
133+ #[ track_caller]
134+ fn clone_eyre ( e : & eyre:: Report ) -> eyre:: Report {
135+ if let Some ( e) = e. downcast_ref :: < FormattedFullDiagnostic > ( ) . cloned ( ) {
136+ eyre ! ( e)
137+ } else {
138+ eyre ! ( "{e}" ) // cursed reformatting of eyre::Report
139+ }
140+ }
0 commit comments