FIX: Don not clone Locales and Languages, pass them by reference
This commit is contained in:
@@ -28,17 +28,24 @@ fn to_node_error(error: XlsxError) -> Error {
|
||||
Error::new(Status::Unknown, error.to_string())
|
||||
}
|
||||
|
||||
fn leak_str(s: &str) -> &'static str {
|
||||
Box::leak(s.to_owned().into_boxed_str())
|
||||
}
|
||||
|
||||
#[napi]
|
||||
pub struct Model {
|
||||
model: BaseModel,
|
||||
model: BaseModel<'static>,
|
||||
}
|
||||
|
||||
#[napi]
|
||||
impl Model {
|
||||
#[napi(constructor)]
|
||||
pub fn new(name: String, locale: String, timezone: String, language_id: String) -> Result<Self> {
|
||||
let model =
|
||||
BaseModel::new_empty(&name, &locale, &timezone, &language_id).map_err(to_js_error)?;
|
||||
let name = leak_str(&name);
|
||||
let locale = leak_str(&locale);
|
||||
let timezone = leak_str(&timezone);
|
||||
let language_id = leak_str(&language_id);
|
||||
let model = BaseModel::new_empty(name, locale, timezone, language_id).map_err(to_js_error)?;
|
||||
Ok(Self { model })
|
||||
}
|
||||
|
||||
@@ -49,14 +56,16 @@ impl Model {
|
||||
tz: String,
|
||||
language_id: String,
|
||||
) -> Result<Model> {
|
||||
let model = load_from_xlsx(&file_path, &locale, &tz, &language_id)
|
||||
let language_id = leak_str(&language_id);
|
||||
let model = load_from_xlsx(&file_path, &locale, &tz, language_id)
|
||||
.map_err(|error| Error::new(Status::Unknown, error.to_string()))?;
|
||||
Ok(Self { model })
|
||||
}
|
||||
|
||||
#[napi(factory)]
|
||||
pub fn from_icalc(file_name: String, language_id: String) -> Result<Model> {
|
||||
let model = load_from_icalc(&file_name, &language_id)
|
||||
let language_id = leak_str(&language_id);
|
||||
let model = load_from_icalc(&file_name, language_id)
|
||||
.map_err(|error| Error::new(Status::Unknown, error.to_string()))?;
|
||||
Ok(Self { model })
|
||||
}
|
||||
|
||||
@@ -21,23 +21,31 @@ fn to_js_error(error: String) -> Error {
|
||||
Error::new(Status::Unknown, error)
|
||||
}
|
||||
|
||||
fn leak_str(s: &str) -> &'static str {
|
||||
Box::leak(s.to_owned().into_boxed_str())
|
||||
}
|
||||
|
||||
#[napi]
|
||||
pub struct UserModel {
|
||||
model: BaseModel,
|
||||
model: BaseModel<'static>,
|
||||
}
|
||||
|
||||
#[napi]
|
||||
impl UserModel {
|
||||
#[napi(constructor)]
|
||||
pub fn new(name: String, locale: String, timezone: String, language_id: String) -> Result<Self> {
|
||||
let model =
|
||||
BaseModel::new_empty(&name, &locale, &timezone, &language_id).map_err(to_js_error)?;
|
||||
let name = leak_str(&name);
|
||||
let locale = leak_str(&locale);
|
||||
let timezone = leak_str(&timezone);
|
||||
let language_id = leak_str(&language_id);
|
||||
let model = BaseModel::new_empty(name, locale, timezone, language_id).map_err(to_js_error)?;
|
||||
Ok(Self { model })
|
||||
}
|
||||
|
||||
#[napi(factory)]
|
||||
pub fn from_bytes(bytes: &[u8], language_id: String) -> Result<UserModel> {
|
||||
let model = BaseModel::from_bytes(bytes, &language_id).map_err(to_js_error)?;
|
||||
let language_id = leak_str(&language_id);
|
||||
let model = BaseModel::from_bytes(bytes, language_id).map_err(to_js_error)?;
|
||||
Ok(UserModel { model })
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user