1+ use std:: borrow:: Cow ;
12use std:: collections:: BTreeSet ;
23use std:: fmt:: { self , Write as _} ;
34use std:: marker:: PhantomData ;
@@ -12,8 +13,8 @@ use serde::{Deserialize, Serialize};
1213#[ derive( Debug , Clone ) ]
1314pub ( crate ) struct SortedTemplate < F > {
1415 format : PhantomData < F > ,
15- before : String ,
16- after : String ,
16+ before : Cow < ' static , str > ,
17+ after : Cow < ' static , str > ,
1718 fragments : BTreeSet < String > ,
1819}
1920
@@ -38,14 +39,20 @@ impl<F> SortedTemplate<F> {
3839 if split. next ( ) . is_some ( ) {
3940 return Err ( Error ( "delimiter should appear at most once" ) ) ;
4041 }
41- Ok ( Self :: from_before_after ( before, after) )
42+ Ok ( Self :: from_before_after ( before. to_string ( ) , after. to_string ( ) ) )
4243 }
4344
4445 /// 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+ }
4956 }
5057}
5158
@@ -102,8 +109,8 @@ impl<F: FileFormat> FromStr for SortedTemplate<F> {
102109 }
103110 Ok ( Self {
104111 format : PhantomData ,
105- before : before. to_string ( ) ,
106- after : s. to_string ( ) ,
112+ before : before. to_string ( ) . into ( ) ,
113+ after : s. to_string ( ) . into ( ) ,
107114 fragments,
108115 } )
109116 }
0 commit comments