Struct neon::types::JsValue

source ·
pub struct JsValue(/* private fields */);
Expand description

The type of any JavaScript value, i.e., the root of all types.

The JsValue type is a catch-all type that sits at the top of the JavaScript type hierarchy. All JavaScript values can be safely and statically upcast to JsValue; by contrast, a downcast of a JsValue to another type requires a runtime check. (For TypeScript programmers, this can be thought of as similar to TypeScript’s unknown type.)

The JsValue type can be useful for generic, dynamic, or otherwise hard-to-express API signatures, such as overloaded types:

// Takes a string and adds the specified padding to the left.
// If the padding is a string, it's added as-is.
// If the padding is a number, then that number of spaces is added.
fn pad_left(mut cx: FunctionContext) -> JsResult<JsString> {
    let string: Handle<JsString> = cx.argument(0)?;
    let padding: Handle<JsValue> = cx.argument(1)?;

    let padding: String = if let Ok(str) = padding.downcast::<JsString, _>(&mut cx) {
        str.value(&mut cx)
    } else if let Ok(num) = padding.downcast::<JsNumber, _>(&mut cx) {
        " ".repeat(num.value(&mut cx) as usize)
    } else {
        return cx.throw_type_error("expected string or number");
    };

    let new_value = padding + &string.value(&mut cx);
    Ok(cx.string(&new_value))
}

Trait Implementations§

source§

impl Debug for JsValue

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Value for JsValue

source§

fn to_string<'cx, C: Context<'cx>>(&self, cx: &mut C) -> JsResult<'cx, JsString>

source§

fn as_value<'cx, C: Context<'cx>>(&self, _: &mut C) -> Handle<'cx, JsValue>

source§

fn to_raw(&self) -> Value

Available on crate feature sys only.
Get a raw reference to the wrapped Node-API value.
source§

unsafe fn from_raw<'cx, C: Context<'cx>>( cx: &C, value: Value ) -> Handle<'cx, Self>

Available on crate feature sys only.
Creates a value from a raw Node-API value. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.