1
- use serde:: { Deserialize , Deserializer , Serialize } ;
1
+ use serde:: Deserialize ;
2
2
use std:: ops:: Range ;
3
3
4
4
use annotate_snippets:: renderer:: DEFAULT_TERM_WIDTH ;
5
5
use annotate_snippets:: { Annotation , Level , Message , Renderer , Snippet } ;
6
6
7
7
#[ derive( Deserialize ) ]
8
- pub ( crate ) struct Fixture < ' a > {
8
+ pub ( crate ) struct Fixture {
9
9
#[ serde( default ) ]
10
10
pub ( crate ) renderer : RendererDef ,
11
- #[ serde( borrow) ]
12
- pub ( crate ) message : MessageDef < ' a > ,
11
+ pub ( crate ) message : MessageDef ,
13
12
}
14
13
15
14
#[ derive( Deserialize ) ]
16
- pub struct MessageDef < ' a > {
15
+ pub struct MessageDef {
17
16
#[ serde( with = "LevelDef" ) ]
18
17
pub level : Level ,
19
- #[ serde( borrow) ]
20
- pub title : & ' a str ,
18
+ pub title : String ,
21
19
#[ serde( default ) ]
22
- #[ serde( borrow) ]
23
- pub id : Option < & ' a str > ,
20
+ pub id : Option < String > ,
24
21
#[ 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 > ,
30
24
}
31
25
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 {
34
28
let MessageDef {
35
29
level,
36
30
title,
@@ -42,100 +36,61 @@ impl<'a> From<MessageDef<'a>> for Message<'a> {
42
36
if let Some ( id) = id {
43
37
message = message. id ( id) ;
44
38
}
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) ) ;
47
41
message
48
42
}
49
43
}
50
44
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
-
66
45
#[ derive( Deserialize ) ]
67
- pub struct SnippetDef < ' a > {
68
- #[ serde( borrow) ]
69
- pub source : & ' a str ,
46
+ pub struct SnippetDef {
47
+ pub source : String ,
70
48
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 > ,
76
51
#[ serde( default ) ]
77
52
pub fold : bool ,
78
53
}
79
54
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 {
82
57
let SnippetDef {
83
58
source,
84
59
line_start,
85
60
origin,
86
61
annotations,
87
62
fold,
88
63
} = 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) ;
90
65
if let Some ( origin) = origin {
91
66
snippet = snippet. origin ( origin) ;
92
67
}
93
- snippet = snippet. annotations ( annotations) ;
68
+ snippet = snippet. annotations ( annotations. iter ( ) . map ( Into :: into ) ) ;
94
69
snippet
95
70
}
96
71
}
97
72
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 {
111
75
pub range : Range < usize > ,
112
- #[ serde( borrow) ]
113
- pub label : & ' a str ,
76
+ pub label : String ,
114
77
#[ serde( with = "LevelDef" ) ]
115
78
pub level : Level ,
116
79
}
117
80
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 {
120
83
let AnnotationDef {
121
84
range,
122
85
label,
123
86
level,
124
87
} = val;
125
- level. span ( range) . label ( label)
88
+ level. span ( range. start ..range . end ) . label ( label)
126
89
}
127
90
}
128
91
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
-
137
92
#[ allow( dead_code) ]
138
- #[ derive( Serialize , Deserialize ) ]
93
+ #[ derive( Deserialize ) ]
139
94
#[ serde( remote = "Level" ) ]
140
95
enum LevelDef {
141
96
Error ,
0 commit comments