@@ -62,11 +62,16 @@ impl Display for MapUnit {
6262impl TryFrom < & Path > for MapUnit {
6363 type Error = anyhow:: Error ;
6464 fn try_from ( value : & Path ) -> Result < Self > {
65- let mut split = value. file_stem ( ) . unwrap ( ) . to_str ( ) . unwrap ( ) . split ( '_' ) ;
65+ let mut split = value
66+ . file_stem ( )
67+ . unwrap_or_default ( )
68+ . to_str ( )
69+ . unwrap_or_default ( )
70+ . split ( '_' ) ;
6671 Ok ( MapUnit {
6772 unit : split. next ( ) . context ( "Not a map unitt" ) ?. into ( ) ,
6873 kind : split. next ( ) . context ( "Not a map unitt" ) ?. into ( ) ,
69- aocfield : value. to_str ( ) . unwrap ( ) . contains ( "AocField" ) ,
74+ aocfield : value. to_str ( ) . unwrap_or_default ( ) . contains ( "AocField" ) ,
7075 } )
7176 }
7277}
@@ -96,7 +101,10 @@ impl MapUnit {
96101 }
97102
98103 fn get_aoc_path ( & self ) -> PathBuf {
99- util:: settings ( ) . dlc_dir ( ) . unwrap ( ) . join ( self . get_path ( ) )
104+ util:: settings ( )
105+ . dlc_dir ( )
106+ . expect ( "There's no DLC folder" )
107+ . join ( self . get_path ( ) )
100108 }
101109
102110 fn get_resource_path ( & self ) -> String {
@@ -126,8 +134,7 @@ impl MapUnit {
126134 MapUnitType :: Static => {
127135 let pack = util:: get_stock_pack ( "TitleBG" ) ?;
128136 Ok ( Byml :: from_binary ( & decompress (
129- pack
130- . get_data ( & self . get_path ( ) )
137+ pack. get_data ( & self . get_path ( ) )
131138 . with_context ( || {
132139 jstr ! ( "Failed to read {&self.get_path()} from TitleBG.pack" )
133140 } ) ?
@@ -146,8 +153,7 @@ impl MapUnit {
146153 MapUnitType :: Static => {
147154 let pack = util:: get_stock_pack ( "AocMainField" ) ?;
148155 Ok ( Byml :: from_binary ( & decompress (
149- pack
150- . get_data ( & self . get_path ( ) )
156+ pack. get_data ( & self . get_path ( ) )
151157 . with_context ( || {
152158 jstr ! ( "Failed to read {&self.get_path()} from TitleBG.pack" )
153159 } ) ?
@@ -161,11 +167,11 @@ impl MapUnit {
161167fn merge_entries ( diff : & Hash , entries : & mut Vec < Byml > ) -> Result < ( ) > {
162168 let stock_hashes: Vec < u32 > = entries
163169 . iter ( )
164- . map ( |e| e[ "HashId" ] . as_u32 ( ) . unwrap ( ) )
165- . collect ( ) ;
170+ . map ( |e| Ok ( e[ "HashId" ] . as_u32 ( ) ? ) )
171+ . collect :: < Result < _ > > ( ) ? ;
166172 let mut orphans: Vec < Byml > = vec ! [ ] ;
167173 for ( hash, entry) in diff[ "mod" ] . as_hash ( ) ? {
168- let hash = hash. parse :: < u32 > ( ) . unwrap ( ) ;
174+ let hash = hash. parse :: < u32 > ( ) ? ;
169175 if let Some ( idx) = stock_hashes. iter ( ) . position ( |h| * h == hash) {
170176 entries[ idx] = entry. clone ( ) ;
171177 } else {
@@ -188,19 +194,18 @@ fn merge_entries(diff: &Hash, entries: &mut Vec<Byml>) -> Result<()> {
188194 . cloned ( )
189195 . chain ( orphans. into_iter ( ) )
190196 . filter ( |e| {
191- !stock_hashes. contains (
192- & ( e[ "HashId" ]
193- . as_u32 ( )
194- . or_else ( |_| e[ "HashId" ] . as_i32 ( ) . map ( |i| i as u32 ) )
195- . unwrap ( ) ) ,
196- )
197+ e[ "HashId" ]
198+ . as_u32 ( )
199+ . or_else ( |_| e[ "HashId" ] . as_i32 ( ) . map ( |i| i as u32 ) )
200+ . map ( |h| !stock_hashes. contains ( & h) )
201+ . unwrap_or ( false )
197202 } ) ,
198203 ) ;
199204 entries. sort_by_cached_key ( |e| {
200205 e[ "HashId" ]
201206 . as_u32 ( )
202207 . or_else ( |_| e[ "HashId" ] . as_i32 ( ) . map ( |i| i as u32 ) )
203- . unwrap ( )
208+ . unwrap_or ( 0 )
204209 } ) ;
205210 Ok ( ( ) )
206211}
@@ -218,16 +223,18 @@ fn merge_map(map_unit: MapUnit, diff: &Hash, settings: &Settings) -> Result<(Str
218223 merge_entries ( diff[ "Rails" ] . as_hash ( ) ?, rails) ?;
219224 }
220225 let data = new_map. to_binary ( settings. endian ( ) ) ;
221- let size = rstb:: calc:: calc_from_size_and_name (
222- data. len ( ) ,
223- "dummy.mubin" ,
224- if settings. wiiu {
225- rstb:: Endian :: Big
226- } else {
227- rstb:: Endian :: Little
228- } ,
229- )
230- . unwrap ( ) ;
226+ let size = unsafe {
227+ rstb:: calc:: calc_from_size_and_name (
228+ data. len ( ) ,
229+ "dummy.mubin" ,
230+ if settings. wiiu {
231+ rstb:: Endian :: Big
232+ } else {
233+ rstb:: Endian :: Little
234+ } ,
235+ )
236+ . unwrap_unchecked ( )
237+ } ;
231238 let out = settings
232239 . master_mod_dir ( )
233240 . join ( if util:: settings ( ) . dlc_dir ( ) . is_some ( ) {
@@ -236,8 +243,8 @@ fn merge_map(map_unit: MapUnit, diff: &Hash, settings: &Settings) -> Result<(Str
236243 util:: content ( )
237244 } )
238245 . join ( map_unit. get_path ( ) ) ;
239- if !out. parent ( ) . unwrap ( ) . exists ( ) {
240- fs:: create_dir_all ( out. parent ( ) . unwrap ( ) ) ?;
246+ if !out. parent ( ) . expect ( "Folder has no parent?!?" ) . exists ( ) {
247+ fs:: create_dir_all ( out. parent ( ) . expect ( "Folder has no parent?!?" ) ) ?;
241248 }
242249 fs:: write ( out, compress ( data) ) ?;
243250 Ok ( (
@@ -252,7 +259,7 @@ fn merge_map(map_unit: MapUnit, diff: &Hash, settings: &Settings) -> Result<(Str
252259
253260#[ pyfunction]
254261pub fn merge_maps ( py : Python , diff_bytes : Vec < u8 > ) -> PyResult < PyObject > {
255- let diffs = Byml :: from_binary ( & diff_bytes) . unwrap ( ) ;
262+ let diffs = Byml :: from_binary ( & diff_bytes) . map_err ( anyhow :: Error :: from ) ? ;
256263 let rstb_values: HashMap < String , u32 > = if let Byml :: Hash ( diffs) = diffs {
257264 py. allow_threads ( || -> Result < HashMap < String , u32 > > {
258265 let settings = util:: settings ( ) . clone ( ) ;
0 commit comments