1
+ use std:: borrow:: Cow ;
1
2
use std:: collections:: BTreeSet ;
2
3
use std:: fmt:: { self , Write as _} ;
3
4
use std:: marker:: PhantomData ;
@@ -12,8 +13,8 @@ use serde::{Deserialize, Serialize};
12
13
#[ derive( Debug , Clone ) ]
13
14
pub ( crate ) struct SortedTemplate < F > {
14
15
format : PhantomData < F > ,
15
- before : String ,
16
- after : String ,
16
+ before : Cow < ' static , str > ,
17
+ after : Cow < ' static , str > ,
17
18
fragments : BTreeSet < String > ,
18
19
}
19
20
@@ -38,14 +39,20 @@ impl<F> SortedTemplate<F> {
38
39
if split. next ( ) . is_some ( ) {
39
40
return Err ( Error ( "delimiter should appear at most once" ) ) ;
40
41
}
41
- Ok ( Self :: from_before_after ( before, after) )
42
+ Ok ( Self :: from_before_after ( before. to_string ( ) , after. to_string ( ) ) )
42
43
}
43
44
44
45
/// Template will insert fragments between `before` and `after`
45
- pub ( crate ) fn from_before_after < S : ToString , T : ToString > ( before : S , after : T ) -> Self {
46
- let before = before. to_string ( ) ;
47
- let after = after. to_string ( ) ;
48
- Self { format : PhantomData , before, after, fragments : Default :: default ( ) }
46
+ pub ( crate ) fn from_before_after (
47
+ before : impl Into < Cow < ' static , str > > ,
48
+ after : impl Into < Cow < ' static , str > > ,
49
+ ) -> Self {
50
+ Self {
51
+ format : PhantomData ,
52
+ before : before. into ( ) ,
53
+ after : after. into ( ) ,
54
+ fragments : Default :: default ( ) ,
55
+ }
49
56
}
50
57
}
51
58
@@ -102,8 +109,8 @@ impl<F: FileFormat> FromStr for SortedTemplate<F> {
102
109
}
103
110
Ok ( Self {
104
111
format : PhantomData ,
105
- before : before. to_string ( ) ,
106
- after : s. to_string ( ) ,
112
+ before : before. to_string ( ) . into ( ) ,
113
+ after : s. to_string ( ) . into ( ) ,
107
114
fragments,
108
115
} )
109
116
}
0 commit comments