Unzipper
Desarrollo del unzipper
Descripcion del unzipper
En Uranium4Linux el unzipper es la parte encargada de descomprimir el archivo que contiene los archivos necesarios para descargar y configurar el pack de mods para el usuario.
Codigo
La idea principal del unzipper es la siguiente:
Se recibe un argumento que será la ruta al .zip que contenga la información del modpack. Con esa ruta se extraerán todos los archivos que contenga el .zip en una carpeta temporal para después copiar los archivos de configuración, los "raw mods" y finalmente leer el json y descargar los mods.
Raw mods son los mods que debido a que no han sido encontrados en la RinthAPI se han metido "hardcoded" al .zip y por lo tanto solo hace falta copiarlos a la ruta destino.
Problemas surgidos
Mientras desarrollaba el unzipper me he dado cuenta de que necesito de algún módulo en mi programa que sea capaz de darme buenos mensajes de errores debido a que aunque Rust sea un lenguaje compilado sus runtime errors aveces pueden ser un poco desesperantes.
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Os { code: 2, kind: NotFound, message: "No such file or directory" }', uranium4Linux/src/zipper/pack_zipper.rs:63:49
stack backtrace:
0: rust_begin_unwind
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/panicking.rs:584:5
1: core::panicking::panic_fmt
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/core/src/panicking.rs:143:14
2: core::result::unwrap_failed
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/core/src/result.rs:1785:5
3: core::result::Result::unwrap
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/core/src/result.rs:1078:23
4: uranium4Linux::zipper::pack_zipper::get_new_files
at ./uranium4Linux/src/zipper/pack_zipper.rs:63:25
5: uranium4Linux::zipper::pack_zipper::search_files
at ./uranium4Linux/src/zipper/pack_zipper.rs:45:9
6: uranium4Linux::zipper::pack_zipper::compress_pack
at ./uranium4Linux/src/zipper/pack_zipper.rs:22:5
7: uranium4Linux::modpack_maker::maker::make_modpack::{{closure}}
at ./uranium4Linux/src/modpack_maker/maker.rs:40:5
8: as core::future::future::Future>::poll
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/core/src/future/mod.rs:91:19
9: uranium4Linux::main::{{closure}}
at ./uranium4Linux/src/main.rs:31:47
10: as core::future::future::Future>::poll
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/core/src/future/mod.rs:91:19
11: tokio::park::thread::CachedParkThread::block_on::{{closure}}
at /home/sergio/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.16.1/src/park/thread.rs:263:54
12: tokio::coop::with_budget::{{closure}}
at /home/sergio/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.16.1/src/coop.rs:102:9
13: std::thread::local::LocalKey::try_with
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/thread/local.rs:442:16
14: std::thread::local::LocalKey::with
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/thread/local.rs:418:9
15: tokio::coop::with_budget
at /home/sergio/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.16.1/src/coop.rs:95:5
16: tokio::coop::budget
at /home/sergio/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.16.1/src/coop.rs:72:5
17: tokio::park::thread::CachedParkThread::block_on
at /home/sergio/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.16.1/src/park/thread.rs:263:31
18: tokio::runtime::enter::Enter::block_on
at /home/sergio/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.16.1/src/runtime/enter.rs:151:13
19: tokio::runtime::thread_pool::ThreadPool::block_on
at /home/sergio/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.16.1/src/runtime/thread_pool/mod.rs:73:9
20: tokio::runtime::Runtime::block_on
at /home/sergio/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.16.1/src/runtime/mod.rs:477:43
21: uranium4Linux::main
at ./uranium4Linux/src/main.rs:36:5
22: core::ops::function::FnOnce::call_once
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/core/src/ops/function.rs:227:5
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
MORE DEVELOPMENT IS REQUIRED
Comentarios
Publicar un comentario