From 24da4e6ffb3f7a1d96fd6ff80cf4ee0f967cf783 Mon Sep 17 00:00:00 2001 From: Cong-Cong Pan Date: Fri, 20 Dec 2024 12:58:41 +0800 Subject: [PATCH] perf(napi): JsStringUtf8 take & into_owned & as_str fn (#2404) --- crates/napi/src/js_values/string/utf8.rs | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/crates/napi/src/js_values/string/utf8.rs b/crates/napi/src/js_values/string/utf8.rs index 602709b0..1f85cc30 100644 --- a/crates/napi/src/js_values/string/utf8.rs +++ b/crates/napi/src/js_values/string/utf8.rs @@ -1,7 +1,7 @@ use std::convert::TryFrom; use std::str; -use crate::{Error, JsString, Result, Status}; +use crate::{Error, JsString, Result}; pub struct JsStringUtf8 { pub(crate) inner: JsString, @@ -10,13 +10,7 @@ pub struct JsStringUtf8 { impl JsStringUtf8 { pub fn as_str(&self) -> Result<&str> { - match str::from_utf8(&self.buf) { - Err(e) => Err(Error::new( - Status::InvalidArg, - format!("Failed to read utf8 string, {}", e), - )), - Ok(s) => Ok(s), - } + Ok(unsafe { str::from_utf8_unchecked(&self.buf) }) } pub fn as_slice(&self) -> &[u8] { @@ -32,11 +26,11 @@ impl JsStringUtf8 { } pub fn into_owned(self) -> Result { - Ok(self.as_str()?.to_owned()) + Ok(unsafe { String::from_utf8_unchecked(self.buf) }) } pub fn take(self) -> Vec { - self.as_slice().to_vec() + self.buf } pub fn into_value(self) -> JsString {