use std::str::FromStr;
use super::extract_from_temporal_type;
use crate::{Context, JsNativeError, JsObject, JsResult, JsValue, js_string};
use temporal_rs::Calendar;
#[allow(unused)]
pub(crate) fn get_temporal_calendar_slot_value_with_default(
item: &JsObject,
context: &mut Context,
) -> JsResult<Calendar> {
if let Some(calendar) = extract_from_temporal_type(
item,
|d| Ok(Some(d.inner.calendar().clone())),
|dt| Ok(Some(dt.inner.calendar().clone())),
|ym| Ok(Some(ym.inner.calendar().clone())),
|md| Ok(Some(md.inner.calendar().clone())),
|zdt| Ok(Some(zdt.inner.calendar().clone())),
)? {
return Ok(calendar);
}
let calendar_like = item.get(js_string!("calendar"), context)?;
if calendar_like.is_undefined() {
return Ok(Calendar::ISO);
}
to_temporal_calendar_identifier(&calendar_like)
}
pub(crate) fn to_temporal_calendar_identifier(calendar_like: &JsValue) -> JsResult<Calendar> {
if let Some(calendar_like) = calendar_like.as_object() {
if let Some(calendar) = extract_from_temporal_type(
&calendar_like,
|d| Ok(Some(d.inner.calendar().clone())),
|dt| Ok(Some(dt.inner.calendar().clone())),
|ym| Ok(Some(ym.inner.calendar().clone())),
|md| Ok(Some(md.inner.calendar().clone())),
|zdt| Ok(Some(zdt.inner.calendar().clone())),
)? {
return Ok(calendar);
}
}
let Some(calendar_id) = calendar_like.as_string() else {
return Err(JsNativeError::typ()
.with_message("temporalCalendarLike is not a string.")
.into());
};
Ok(Calendar::from_str(&calendar_id.to_std_string_escaped())?)
}