@@ -12,7 +12,7 @@ use nom::{
12
12
#[ derive( Debug , PartialEq , Eq ) ]
13
13
pub ( crate ) struct MenuentryBody < ' a > {
14
14
insmod : Vec < & ' a str > ,
15
- chainloader : & ' a str ,
15
+ pub ( crate ) chainloader : String ,
16
16
search : & ' a str ,
17
17
version : u8 ,
18
18
extra : Vec < ( & ' a str , & ' a str ) > ,
@@ -40,7 +40,7 @@ impl<'a> From<Vec<(&'a str, &'a str)>> for MenuentryBody<'a> {
40
40
fn from ( vec : Vec < ( & ' a str , & ' a str ) > ) -> Self {
41
41
let mut entry = Self {
42
42
insmod : vec ! [ ] ,
43
- chainloader : "" ,
43
+ chainloader : "" . into ( ) ,
44
44
search : "" ,
45
45
version : 0 ,
46
46
extra : vec ! [ ] ,
@@ -49,7 +49,7 @@ impl<'a> From<Vec<(&'a str, &'a str)>> for MenuentryBody<'a> {
49
49
for ( key, value) in vec {
50
50
match key {
51
51
"insmod" => entry. insmod . push ( value) ,
52
- "chainloader" => entry. chainloader = value,
52
+ "chainloader" => entry. chainloader = value. into ( ) ,
53
53
"search" => entry. search = value,
54
54
"set" => { }
55
55
_ => entry. extra . push ( ( key, value) ) ,
@@ -62,7 +62,7 @@ impl<'a> From<Vec<(&'a str, &'a str)>> for MenuentryBody<'a> {
62
62
63
63
#[ derive( Debug , PartialEq , Eq ) ]
64
64
pub ( crate ) struct MenuEntry < ' a > {
65
- pub ( crate ) title : & ' a str ,
65
+ pub ( crate ) title : String ,
66
66
pub ( crate ) body : MenuentryBody < ' a > ,
67
67
}
68
68
@@ -74,6 +74,21 @@ impl<'a> Display for MenuEntry<'a> {
74
74
}
75
75
}
76
76
77
+ impl < ' a > MenuEntry < ' a > {
78
+ pub ( crate ) fn new ( boot_label : & str , uki_id : & str ) -> Self {
79
+ Self {
80
+ title : format ! ( "{boot_label}: ({uki_id})" ) ,
81
+ body : MenuentryBody {
82
+ insmod : vec ! [ "fat" , "chain" ] ,
83
+ chainloader : format ! ( "/EFI/Linux/{uki_id}.efi" ) ,
84
+ search : "--no-floppy --set=root --fs-uuid \" ${EFI_PART_UUID}\" " ,
85
+ version : 0 ,
86
+ extra : vec ! [ ] ,
87
+ } ,
88
+ }
89
+ }
90
+ }
91
+
77
92
pub fn take_until_balanced_allow_nested (
78
93
opening_bracket : char ,
79
94
closing_bracket : char ,
@@ -162,7 +177,7 @@ fn parse_menuentry(input: &str) -> IResult<&str, MenuEntry> {
162
177
Ok ( (
163
178
input,
164
179
MenuEntry {
165
- title,
180
+ title : title . to_string ( ) ,
166
181
body : MenuentryBody :: from ( map) ,
167
182
} ,
168
183
) )
@@ -223,21 +238,21 @@ mod test {
223
238
224
239
let expected = vec ! [
225
240
MenuEntry {
226
- title: "Fedora 42: (Verity-42)" ,
241
+ title: "Fedora 42: (Verity-42)" . into ( ) ,
227
242
body: MenuentryBody {
228
243
insmod: vec![ "fat" , "chain" ] ,
229
244
search: "--no-floppy --set=root --fs-uuid \" ${EFI_PART_UUID}\" " ,
230
- chainloader: "/EFI/Linux/7e11ac46e3e022053e7226a20104ac656bf72d1a84e3a398b7cce70e9df188b6.efi" ,
245
+ chainloader: "/EFI/Linux/7e11ac46e3e022053e7226a20104ac656bf72d1a84e3a398b7cce70e9df188b6.efi" . into ( ) ,
231
246
version: 0 ,
232
247
extra: vec![ ] ,
233
248
} ,
234
249
} ,
235
250
MenuEntry {
236
- title: "Fedora 43: (Verity-43)" ,
251
+ title: "Fedora 43: (Verity-43)" . into ( ) ,
237
252
body: MenuentryBody {
238
253
insmod: vec![ "fat" , "chain" ] ,
239
254
search: "--no-floppy --set=root --fs-uuid \" ${EFI_PART_UUID}\" " ,
240
- chainloader: "/EFI/Linux/uki.efi" ,
255
+ chainloader: "/EFI/Linux/uki.efi" . into ( ) ,
241
256
version: 0 ,
242
257
extra: vec![
243
258
( "extra_field1" , "this is extra" ) ,
0 commit comments