@@ -81,25 +81,25 @@ fn linux_disks(lib_path: &str) -> Vec<HashMap<String, String>> {
81
81
return Vec :: new ( ) ;
82
82
}
83
83
} ;
84
- let disks: Vec < & str > = output. lines ( ) . collect ( ) ;
85
- let filtered_disks: Vec < & str > = disks. into_iter ( ) . filter ( |& disk| !disk. contains ( "loop" ) ) . collect ( ) ;
86
- let keys_raw = filtered_disks[ 0 ] . to_lowercase ( )
87
- . replace ( "name" , "DeviceID" )
88
- . replace ( "model" , "Name" )
89
- . replace ( "size" , "Size" ) ;
90
- let keys: Vec < & str > = keys_raw. split_whitespace ( ) . collect ( ) ;
91
- let mut disk_info = Vec :: new ( ) ;
92
- for line in & filtered_disks[ 1 ..] {
93
- let values: Vec < & str > = line. split_whitespace ( ) . collect ( ) ;
94
- let mut disk_map = HashMap :: new ( ) ;
95
- for ( key, value) in keys. iter ( ) . zip ( values. iter ( ) ) {
96
- disk_map. insert ( key. to_string ( ) , value. to_string ( ) ) ;
84
+ // Skip the header line
85
+ let disks_skipped: Vec < & str > = output. lines ( ) . skip ( 1 ) . collect ( ) ;
86
+ let filtered_disks: Vec < & str > = disks_skipped. into_iter ( ) . filter ( |& disk| !disk. contains ( "loop" ) ) . collect ( ) ;
87
+ let mut disk_list = Vec :: new ( ) ;
88
+ for disk in filtered_disks {
89
+ // Split the disk info by whitespace and collect each part
90
+ let parts: Vec < & str > = disk. split_whitespace ( ) . collect ( ) ;
91
+ // Ensure the disk info has at least 4 parts (NAME, SIZE, TYPE, MODEL)
92
+ if parts. len ( ) >= 4 {
93
+ let disk_info = HashMap :: from ( [
94
+ ( "Name" . to_string ( ) , parts[ 0 ] . to_string ( ) ) ,
95
+ ( "Size" . to_string ( ) , parse_size ( parts[ 1 ] ) ) ,
96
+ ( "Type" . to_string ( ) , parts[ 2 ] . to_string ( ) ) ,
97
+ ( "Model" . to_string ( ) , parts[ 3 ..] . join ( " " ) ) ,
98
+ ] ) ;
99
+ disk_list. push ( disk_info) ;
97
100
}
98
- disk_map. insert ( "Size" . to_string ( ) , parse_size ( disk_map. get ( "Size" ) . unwrap ( ) ) ) ;
99
- disk_map. remove ( "type" ) ;
100
- disk_info. push ( disk_map) ;
101
101
}
102
- disk_info
102
+ disk_list
103
103
}
104
104
105
105
/// Function to get disk information on macOS.
0 commit comments