Skip to content

Commit

Permalink
refactor: treat undefined args. more like other APIs
Browse files Browse the repository at this point in the history
  • Loading branch information
erivas-ligo committed Nov 6, 2023
1 parent 30fdf09 commit bdaa18a
Showing 1 changed file with 31 additions and 26 deletions.
57 changes: 31 additions & 26 deletions jstz_api/src/urlpattern/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,18 @@ use jstz_core::{
};
use urlpattern::quirks::StringOrInit as InnerStringOrQuirksInit;
use urlpattern::quirks::UrlPatternInit as InnerUrlPatternQuirksInit;
use urlpattern::Error;
use urlpattern::UrlPattern as InnerUrlPattern;
use urlpattern::UrlPatternComponentResult as InnerUrlPatternComponentResult;
use urlpattern::UrlPatternResult as InnerUrlPatternResult;

pub struct UrlPatternInput(InnerStringOrQuirksInit);
impl Default for UrlPatternInput {
fn default() -> Self {
Self(InnerStringOrQuirksInit::Init(
InnerUrlPatternQuirksInit::default(),
))
}
}
#[derive(Default)]
pub struct UrlPatternInit(InnerUrlPatternQuirksInit);

Expand Down Expand Up @@ -70,13 +76,13 @@ impl UrlPattern {
urlpattern::UrlPatternMatchInput,
(InnerStringOrQuirksInit, Option<String>),
)> {
match
urlpattern::quirks::process_match_input(string_or_init, base_url.as_deref())
match urlpattern::quirks::process_match_input(string_or_init, base_url.as_deref())
{
Err(Error::BaseUrlWithInit) => Err(JsError::from_native(JsNativeError::typ()
.with_message("Specifying both an init object, and a separate base URL is not valid"))),
Err(e) => Err(JsError::from_native(
JsNativeError::typ().with_message(e.to_string()),
)),
Ok(Some(input)) => Ok(input),
_ => Err(JsError::from_native(JsNativeError::error()))
Ok(None) => Err(JsError::from_native(JsNativeError::error())),
}
}

Expand Down Expand Up @@ -148,11 +154,9 @@ impl UrlPattern {
let UrlPatternInput(string_or_init) = input;
let (url_pattern_match_input, _) = Self::process_input(string_or_init, base_url)?;

self.url_pattern.test(url_pattern_match_input).map_err(|_| {
JsNativeError::typ()
.with_message("Failed to run `test` on `UrlPattern`")
.into()
})
self.url_pattern
.test(url_pattern_match_input)
.map_err(|e| JsNativeError::typ().with_message(e.to_string()).into())
}

pub fn exec(
Expand All @@ -177,11 +181,7 @@ impl UrlPattern {
url_pattern_result,
})
})
.map_err(|_| {
JsNativeError::typ()
.with_message("Failed to run `exec` on `UrlPattern`")
.into()
})
.map_err(|e| JsNativeError::typ().with_message(e.to_string()).into())
}
}

Expand Down Expand Up @@ -281,7 +281,10 @@ impl UrlPatternClass {
context: &mut Context<'_>,
) -> JsResult<JsValue> {
let url_pattern = UrlPattern::try_from_js(this)?;
let input: UrlPatternInput = args.get(0).unwrap().try_js_into(context)?;
let input: UrlPatternInput = match args.get(0) {
Some(value) => value.try_js_into(context)?,
None => UrlPatternInput::default(),
};
let base_url: Option<String> = args.get_or_undefined(1).try_js_into(context).ok();
Ok(url_pattern.test(input, base_url)?.into_js(context))
}
Expand All @@ -292,20 +295,19 @@ impl UrlPatternClass {
context: &mut Context<'_>,
) -> JsResult<JsValue> {
let url_pattern = UrlPattern::try_from_js(this)?;
let input: UrlPatternInput = args.get(0).unwrap().try_js_into(context)?;
let input: UrlPatternInput = match args.get(0) {
Some(value) => value.try_js_into(context)?,
None => UrlPatternInput::default(),
};
let base_url: Option<String> = args.get_or_undefined(1).try_js_into(context).ok();
url_pattern
.exec(input, base_url)?
.map_or(Ok(JsValue::Null), |e| Ok(e.into_js(context)))
.map_or(Ok(JsValue::Null), |r| Ok(r.into_js(context)))
}
}

impl TryFromJs for UrlPatternInit {
fn try_from_js(value: &JsValue, context: &mut Context<'_>) -> JsResult<Self> {
if value.is_undefined() {
return Ok(UrlPatternInit::default());
}

let obj = value.as_object().ok_or_else(|| {
JsError::from_native(JsNativeError::typ().with_message("Expected `JsObject`"))
})?;
Expand Down Expand Up @@ -469,7 +471,10 @@ impl NativeClass for UrlPatternClass {
args: &[JsValue],
context: &mut Context<'_>,
) -> JsResult<UrlPattern> {
let input: UrlPatternInput = args.get_or_undefined(0).try_js_into(context)?;
let input: UrlPatternInput = match args.get(0) {
Some(value) => value.try_js_into(context)?,
None => UrlPatternInput::default(),
};
let base_url: Option<String> = args.get_or_undefined(1).try_js_into(context)?;

UrlPattern::new(this, input, base_url, context)
Expand All @@ -496,12 +501,12 @@ impl NativeClass for UrlPatternClass {
.accessor(js_string!("username"), username, Attribute::all())
.method(
js_string!("test"),
0,
2,
NativeFunction::from_fn_ptr(UrlPatternClass::test),
)
.method(
js_string!("exec"),
0,
2,
NativeFunction::from_fn_ptr(UrlPatternClass::exec),
);
Ok(())
Expand Down

0 comments on commit bdaa18a

Please sign in to comment.