From 074fe858df2149ea9fd75554383eab8e6f03d21d Mon Sep 17 00:00:00 2001 From: moogle19 Date: Wed, 3 May 2023 15:12:03 +0200 Subject: [PATCH] Avoid unwrap and wrap errors --- native/excoding/src/lib.rs | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/native/excoding/src/lib.rs b/native/excoding/src/lib.rs index 4655b6c..72b961f 100644 --- a/native/excoding/src/lib.rs +++ b/native/excoding/src/lib.rs @@ -1,8 +1,8 @@ #[macro_use] extern crate rustler; -extern crate rustler_codegen; extern crate encoding; extern crate lazy_static; +extern crate rustler_codegen; use encoding::label::encoding_from_whatwg_label; use encoding::{DecoderTrap, EncoderTrap}; @@ -29,13 +29,15 @@ rustler::init!("Elixir.Excoding", [encode, decode]); fn decode<'a>(env: Env<'a>, in_binary: Binary, enc: String) -> NifResult> { match encoding_from_whatwg_label(&enc) { Some(encoding) => { - let in_str = in_binary.to_owned().unwrap(); + let in_str = in_binary + .to_owned() + .ok_or(Error::Term(Box::new("failed to own binary")))?; let res = encoding .decode(in_str.as_slice(), DecoderTrap::Replace) - .unwrap(); + .map_err(|e| Error::Term(Box::new(e.to_string())))?; Ok(res.encode(env)) } - None => Err(Error::BadArg) + None => Err(Error::BadArg), } } @@ -43,11 +45,16 @@ fn decode<'a>(env: Env<'a>, in_binary: Binary, enc: String) -> NifResult(env: Env<'a>, in_str: &str, enc: String) -> NifResult> { match encoding_from_whatwg_label(&enc) { Some(encoding) => { - let enc_bin = encoding.encode(in_str, EncoderTrap::Replace).unwrap(); - let mut bin = OwnedBinary::new(enc_bin.len()).unwrap(); - bin.as_mut_slice().write_all(&enc_bin).unwrap(); + let enc_bin = encoding + .encode(in_str, EncoderTrap::Replace) + .map_err(|e| Error::Term(Box::new(e.to_string())))?; + let mut bin = OwnedBinary::new(enc_bin.len()) + .ok_or(Error::Term(Box::new("failed to create owned binary")))?; + bin.as_mut_slice() + .write_all(&enc_bin) + .map_err(|e| Error::Term(Box::new(e.to_string())))?; Ok(bin.release(env).encode(env)) } - None => Err(Error::BadArg) + None => Err(Error::BadArg), } }