@@ -42,6 +42,28 @@ impl fmt::Display for DirectiveErrorKind {
4242 }
4343}
4444
45+ fn format_field ( field : & Option < String > ) -> String {
46+ match field {
47+ Some ( field) => format ! ( " field {field:?}" ) ,
48+ None => String :: new ( ) ,
49+ }
50+ }
51+
52+ fn format_expression ( expression : & Option < String > ) -> String {
53+ match expression {
54+ Some ( expression) if !expression. is_empty ( ) => format ! ( " {expression:?}" ) ,
55+ _ => String :: new ( ) ,
56+ }
57+ }
58+
59+ fn format_directives ( directives : & [ Directive ] ) -> String {
60+ directives
61+ . iter ( )
62+ . map ( ToString :: to_string)
63+ . collect :: < Vec < _ > > ( )
64+ . join ( ", " )
65+ }
66+
4567#[ derive( Debug , thiserror:: Error ) ]
4668pub enum Error {
4769 #[ error( "failed to parse template: {source}" ) ]
@@ -68,13 +90,19 @@ pub enum Error {
6890 source : serde_json:: Error ,
6991 } ,
7092
71- #[ error( "failed to convert render data to JavaScript: {message}" ) ]
93+ #[ error(
94+ "failed to convert render data{field} to JavaScript: {message}" ,
95+ field = format_field( field)
96+ ) ]
7297 DataToJs {
7398 field : Option < String > ,
7499 message : String ,
75100 } ,
76101
77- #[ error( "failed to inject render data: {message}" ) ]
102+ #[ error(
103+ "failed to inject render data{field}: {message}" ,
104+ field = format_field( field)
105+ ) ]
78106 DataInject {
79107 field : Option < String > ,
80108 message : String ,
@@ -83,17 +111,23 @@ pub enum Error {
83111 #[ error( "failed to manage JavaScript scope: {message}" ) ]
84112 Scope { message : String } ,
85113
86- #[ error( "failed to execute prevue script: {message}" ) ]
114+ #[ error( "failed to execute < script type= \" prevue \" > : {message}" ) ]
87115 SetupScript { message : String } ,
88116
89- #[ error( "invalid {directive}: {kind}" ) ]
117+ #[ error(
118+ "invalid {directive}: {kind}{expression}" ,
119+ expression = format_expression( expression)
120+ ) ]
90121 InvalidDirective {
91122 directive : Directive ,
92123 kind : DirectiveErrorKind ,
93124 expression : Option < String > ,
94125 } ,
95126
96- #[ error( "conflicting directives: {directives:?}" ) ]
127+ #[ error(
128+ "conflicting directives: {directives}" ,
129+ directives = format_directives( directives)
130+ ) ]
97131 ConflictingDirectives { directives : Vec < Directive > } ,
98132}
99133
0 commit comments