@@ -131,22 +131,22 @@ impl From<Resource> for Format {
131131 fn from ( value : Resource ) -> Self {
132132 let mut strings = Vec :: new ( ) ;
133133 let mut plurals = Vec :: new ( ) ;
134- for entry in & value. entries {
135- match & entry. value {
136- Translation :: Singular ( _) => strings. push ( StringResource :: from_entry ( entry) ) ,
134+ for entry in value. entries {
135+ match entry. value {
136+ Translation :: Singular ( _) => strings. push ( StringResource :: from_entry ( & entry) ) ,
137137 Translation :: Plural ( p) => {
138138 let mut items: Vec < PluralItem > = p
139139 . forms
140- . iter ( )
140+ . into_iter ( )
141141 . map ( |( cat, v) | PluralItem {
142- quantity : cat. clone ( ) ,
143- value : v. clone ( ) ,
142+ quantity : cat,
143+ value : v,
144144 } )
145145 . collect ( ) ;
146146 // Ensure stable order later
147147 items. sort_by ( |a, b| a. quantity . cmp ( & b. quantity ) ) ;
148148 plurals. push ( PluralsResource {
149- name : entry. id . clone ( ) ,
149+ name : entry. id ,
150150 items,
151151 translatable : match entry. status {
152152 EntryStatus :: Translated => Some ( true ) ,
@@ -159,7 +159,7 @@ impl From<Resource> for Format {
159159 }
160160
161161 Self {
162- language : value. metadata . language . clone ( ) ,
162+ language : value. metadata . language ,
163163 strings,
164164 plurals,
165165 }
@@ -168,13 +168,18 @@ impl From<Resource> for Format {
168168
169169impl From < Format > for Resource {
170170 fn from ( value : Format ) -> Self {
171- let mut entries: Vec < Entry > = value. strings . iter ( ) . map ( StringResource :: to_entry) . collect ( ) ;
171+ let mut entries: Vec < Entry > = value
172+ . strings
173+ . into_iter ( )
174+ . map ( StringResource :: into_entry)
175+ . collect ( ) ;
172176
173177 // Convert plurals to entries
174- for pr in & value. plurals {
178+ for pr in value. plurals {
175179 let mut forms = std:: collections:: BTreeMap :: new ( ) ;
176- for item in & pr. items {
177- forms. insert ( item. quantity . clone ( ) , item. value . clone ( ) ) ;
180+ for item in pr. items {
181+ let PluralItem { quantity, value } = item;
182+ forms. insert ( quantity, value) ;
178183 }
179184 let all_empty = forms. values ( ) . all ( |v| v. is_empty ( ) ) ;
180185 let status = match pr. translatable {
@@ -190,10 +195,7 @@ impl From<Format> for Resource {
190195 } ;
191196 entries. push ( Entry {
192197 id : pr. name . clone ( ) ,
193- value : Translation :: Plural ( Plural {
194- id : pr. name . clone ( ) ,
195- forms,
196- } ) ,
198+ value : Translation :: Plural ( Plural { id : pr. name , forms } ) ,
197199 comment : None ,
198200 status,
199201 custom : HashMap :: new ( ) ,
@@ -202,7 +204,7 @@ impl From<Format> for Resource {
202204
203205 Resource {
204206 metadata : Metadata {
205- language : value. language . clone ( ) ,
207+ language : value. language ,
206208 domain : String :: new ( ) , // strings.xml does not have a domain
207209 custom : HashMap :: new ( ) ,
208210 } ,
@@ -219,15 +221,23 @@ pub struct StringResource {
219221}
220222
221223impl StringResource {
222- fn to_entry ( & self ) -> Entry {
224+ fn into_entry ( self ) -> Entry {
225+ let StringResource {
226+ name,
227+ value,
228+ translatable,
229+ } = self ;
230+
231+ let is_value_empty = value. is_empty ( ) ;
232+
223233 Entry {
224- id : self . name . clone ( ) ,
225- value : Translation :: Singular ( self . value . clone ( ) ) ,
234+ id : name,
235+ value : Translation :: Singular ( value) ,
226236 comment : None ,
227- status : match self . translatable {
237+ status : match translatable {
228238 Some ( true ) => EntryStatus :: Translated ,
229239 Some ( false ) => EntryStatus :: DoNotTranslate ,
230- None if self . value . is_empty ( ) => EntryStatus :: New ,
240+ None if is_value_empty => EntryStatus :: New ,
231241 None => EntryStatus :: Translated ,
232242 } ,
233243 custom : HashMap :: new ( ) ,
@@ -386,6 +396,7 @@ fn parse_plurals_resource<R: BufRead>(
386396
387397#[ cfg( test) ]
388398mod tests {
399+
389400 use super :: * ;
390401 use crate :: traits:: Parser ;
391402 use crate :: types:: EntryStatus ;
@@ -487,8 +498,9 @@ mod tests {
487498 </resources>
488499 "# ;
489500 let format = Format :: from_str ( xml) . unwrap ( ) ;
490- assert_eq ! ( format. strings. len( ) , 1 ) ;
491- let entry = format. strings [ 0 ] . to_entry ( ) ;
501+ let length = format. strings . len ( ) ;
502+ assert_eq ! ( length, 1 ) ;
503+ let entry = format. strings . into_iter ( ) . next ( ) . unwrap ( ) . into_entry ( ) ;
492504 assert_eq ! ( entry. status, EntryStatus :: New ) ;
493505 }
494506
0 commit comments