1- use serde:: { Deserialize , Deserializer , Serialize } ;
1+ use serde:: Deserialize ;
22use std:: ops:: Range ;
33
44use annotate_snippets:: renderer:: DEFAULT_TERM_WIDTH ;
55use annotate_snippets:: { Annotation , Level , Message , Renderer , Snippet } ;
66
77#[ derive( Deserialize ) ]
8- pub ( crate ) struct Fixture < ' a > {
8+ pub ( crate ) struct Fixture {
99 #[ serde( default ) ]
1010 pub ( crate ) renderer : RendererDef ,
11- #[ serde( borrow) ]
12- pub ( crate ) message : MessageDef < ' a > ,
11+ pub ( crate ) message : MessageDef ,
1312}
1413
1514#[ derive( Deserialize ) ]
16- pub struct MessageDef < ' a > {
15+ pub struct MessageDef {
1716 #[ serde( with = "LevelDef" ) ]
1817 pub level : Level ,
19- #[ serde( borrow) ]
20- pub title : & ' a str ,
18+ pub title : String ,
2119 #[ serde( default ) ]
22- #[ serde( borrow) ]
23- pub id : Option < & ' a str > ,
20+ pub id : Option < String > ,
2421 #[ serde( default ) ]
25- #[ serde( borrow) ]
26- pub footer : Vec < MessageDef < ' a > > ,
27- #[ serde( deserialize_with = "deserialize_snippets" ) ]
28- #[ serde( borrow) ]
29- pub snippets : Vec < Snippet < ' a > > ,
22+ pub footer : Vec < MessageDef > ,
23+ pub snippets : Vec < SnippetDef > ,
3024}
3125
32- impl < ' a > From < MessageDef < ' a > > for Message < ' a > {
33- fn from ( val : MessageDef < ' a > ) -> Self {
26+ impl < ' a > From < & ' a MessageDef > for Message < ' a > {
27+ fn from ( val : & ' a MessageDef ) -> Self {
3428 let MessageDef {
3529 level,
3630 title,
@@ -42,100 +36,61 @@ impl<'a> From<MessageDef<'a>> for Message<'a> {
4236 if let Some ( id) = id {
4337 message = message. id ( id) ;
4438 }
45- message = message. snippets ( snippets) ;
46- message = message. footers ( footer. into_iter ( ) . map ( Into :: into) ) ;
39+ message = message. snippets ( snippets. iter ( ) . map ( Snippet :: from ) ) ;
40+ message = message. footers ( footer. iter ( ) . map ( Into :: into) ) ;
4741 message
4842 }
4943}
5044
51- fn deserialize_snippets < ' de , D > ( deserializer : D ) -> Result < Vec < Snippet < ' de > > , D :: Error >
52- where
53- D : Deserializer < ' de > ,
54- {
55- #[ derive( Deserialize ) ]
56- struct Wrapper < ' a > (
57- #[ serde( with = "SnippetDef" ) ]
58- #[ serde( borrow) ]
59- SnippetDef < ' a > ,
60- ) ;
61-
62- let v = Vec :: deserialize ( deserializer) ?;
63- Ok ( v. into_iter ( ) . map ( |Wrapper ( a) | a. into ( ) ) . collect ( ) )
64- }
65-
6645#[ derive( Deserialize ) ]
67- pub struct SnippetDef < ' a > {
68- #[ serde( borrow) ]
69- pub source : & ' a str ,
46+ pub struct SnippetDef {
47+ pub source : String ,
7048 pub line_start : usize ,
71- #[ serde( borrow) ]
72- pub origin : Option < & ' a str > ,
73- #[ serde( deserialize_with = "deserialize_annotations" ) ]
74- #[ serde( borrow) ]
75- pub annotations : Vec < Annotation < ' a > > ,
49+ pub origin : Option < String > ,
50+ pub annotations : Vec < AnnotationDef > ,
7651 #[ serde( default ) ]
7752 pub fold : bool ,
7853}
7954
80- impl < ' a > From < SnippetDef < ' a > > for Snippet < ' a > {
81- fn from ( val : SnippetDef < ' a > ) -> Self {
55+ impl < ' a > From < & ' a SnippetDef > for Snippet < ' a > {
56+ fn from ( val : & ' a SnippetDef ) -> Self {
8257 let SnippetDef {
8358 source,
8459 line_start,
8560 origin,
8661 annotations,
8762 fold,
8863 } = val;
89- let mut snippet = Snippet :: source ( source) . line_start ( line_start) . fold ( fold) ;
64+ let mut snippet = Snippet :: source ( source) . line_start ( * line_start) . fold ( * fold) ;
9065 if let Some ( origin) = origin {
9166 snippet = snippet. origin ( origin) ;
9267 }
93- snippet = snippet. annotations ( annotations) ;
68+ snippet = snippet. annotations ( annotations. iter ( ) . map ( Into :: into ) ) ;
9469 snippet
9570 }
9671}
9772
98- fn deserialize_annotations < ' de , D > ( deserializer : D ) -> Result < Vec < Annotation < ' de > > , D :: Error >
99- where
100- D : Deserializer < ' de > ,
101- {
102- #[ derive( Deserialize ) ]
103- struct Wrapper < ' a > ( #[ serde( borrow) ] AnnotationDef < ' a > ) ;
104-
105- let v = Vec :: deserialize ( deserializer) ?;
106- Ok ( v. into_iter ( ) . map ( |Wrapper ( a) | a. into ( ) ) . collect ( ) )
107- }
108-
109- #[ derive( Serialize , Deserialize ) ]
110- pub struct AnnotationDef < ' a > {
73+ #[ derive( Deserialize ) ]
74+ pub struct AnnotationDef {
11175 pub range : Range < usize > ,
112- #[ serde( borrow) ]
113- pub label : & ' a str ,
76+ pub label : String ,
11477 #[ serde( with = "LevelDef" ) ]
11578 pub level : Level ,
11679}
11780
118- impl < ' a > From < AnnotationDef < ' a > > for Annotation < ' a > {
119- fn from ( val : AnnotationDef < ' a > ) -> Self {
81+ impl < ' a > From < & ' a AnnotationDef > for Annotation < ' a > {
82+ fn from ( val : & ' a AnnotationDef ) -> Self {
12083 let AnnotationDef {
12184 range,
12285 label,
12386 level,
12487 } = val;
125- level. span ( range) . label ( label)
88+ level. span ( range. start ..range . end ) . label ( label)
12689 }
12790}
12891
129- #[ derive( Serialize , Deserialize ) ]
130- pub ( crate ) struct LabelDef < ' a > {
131- #[ serde( with = "LevelDef" ) ]
132- pub ( crate ) level : Level ,
133- #[ serde( borrow) ]
134- pub ( crate ) label : & ' a str ,
135- }
136-
13792#[ allow( dead_code) ]
138- #[ derive( Serialize , Deserialize ) ]
93+ #[ derive( Deserialize ) ]
13994#[ serde( remote = "Level" ) ]
14095enum LevelDef {
14196 Error ,
0 commit comments