pub struct Val { /* private fields */ }Expand description
A wrapper around a javascript handle
Implementations§
Source§impl Val
impl Val
Sourcepub const fn global_this() -> Val
pub const fn global_this() -> Val
Returns the globalThis object
Sourcepub fn get<T: Into<Val>>(&self, prop: T) -> Val
pub fn get<T: Into<Val>>(&self, prop: T) -> Val
Gets the property prop
Examples found in repository?
examples/dom.rs (line 15)
3fn main() {
4 let document = Val::global("document");
5 let elem = document.call("createElement", &argv!["BUTTON"]);
6 elem.set("textContent", Val::from("Click"));
7 let body = document.call("getElementsByTagName", &argv!["body"]).at(0);
8 elem.call(
9 "addEventListener",
10 &argv![
11 "click",
12 Val::make_fn(|ev| {
13 let console = Console::get();
14 console.call("clear", &[]);
15 console.log(&[ev[0].get("clientX")]);
16 println!("client x: {}", ev[0].get("clientX").as_::<i32>());
17 println!("hello from Rust");
18 Val::undefined()
19 })
20 ],
21 );
22 body.call("appendChild", &argv![elem]);
23}More examples
examples/audio.rs (line 17)
3fn main() {
4 #[allow(non_snake_case)]
5 let mut AudioContext = Val::global("AudioContext");
6 if !AudioContext.as_::<bool>() {
7 println!("No global AudioContext, trying webkitAudioContext");
8 AudioContext = Val::global("webkitAudioContext");
9 }
10
11 println!("Got an AudioContext");
12 let context = AudioContext.new(&[]);
13 let oscillator = context.call("createOscillator", &[]);
14
15 println!("Configuring oscillator");
16 oscillator.set("type", "triangle");
17 oscillator.get("frequency").set::<_, f64>("value", 261.63); // Middle C
18
19 let document = Val::global("document");
20 let elem = document.call("createElement", &argv!["BUTTON"]);
21 elem.set("textContent", "Click");
22 let body = document.call("getElementsByTagName", &argv!["body"]).at(0);
23 elem.call(
24 "addEventListener",
25 &argv![
26 "click",
27 Val::make_fn(move |_| {
28 println!("Playing");
29 oscillator.call("connect", &argv![context.get("destination")]);
30 oscillator.call("start", &argv![0]);
31 println!("All done!");
32 Val::undefined()
33 })
34 ],
35 );
36 body.call("appendChild", &argv![elem]);
37}Sourcepub fn global(name: &str) -> Val
pub fn global(name: &str) -> Val
Gets a global object by name
Examples found in repository?
More examples
examples/dom.rs (line 4)
3fn main() {
4 let document = Val::global("document");
5 let elem = document.call("createElement", &argv!["BUTTON"]);
6 elem.set("textContent", Val::from("Click"));
7 let body = document.call("getElementsByTagName", &argv!["body"]).at(0);
8 elem.call(
9 "addEventListener",
10 &argv![
11 "click",
12 Val::make_fn(|ev| {
13 let console = Console::get();
14 console.call("clear", &[]);
15 console.log(&[ev[0].get("clientX")]);
16 println!("client x: {}", ev[0].get("clientX").as_::<i32>());
17 println!("hello from Rust");
18 Val::undefined()
19 })
20 ],
21 );
22 body.call("appendChild", &argv![elem]);
23}examples/audio.rs (line 5)
3fn main() {
4 #[allow(non_snake_case)]
5 let mut AudioContext = Val::global("AudioContext");
6 if !AudioContext.as_::<bool>() {
7 println!("No global AudioContext, trying webkitAudioContext");
8 AudioContext = Val::global("webkitAudioContext");
9 }
10
11 println!("Got an AudioContext");
12 let context = AudioContext.new(&[]);
13 let oscillator = context.call("createOscillator", &[]);
14
15 println!("Configuring oscillator");
16 oscillator.set("type", "triangle");
17 oscillator.get("frequency").set::<_, f64>("value", 261.63); // Middle C
18
19 let document = Val::global("document");
20 let elem = document.call("createElement", &argv!["BUTTON"]);
21 elem.set("textContent", "Click");
22 let body = document.call("getElementsByTagName", &argv!["body"]).at(0);
23 elem.call(
24 "addEventListener",
25 &argv![
26 "click",
27 Val::make_fn(move |_| {
28 println!("Playing");
29 oscillator.call("connect", &argv![context.get("destination")]);
30 oscillator.call("start", &argv![0]);
31 println!("All done!");
32 Val::undefined()
33 })
34 ],
35 );
36 body.call("appendChild", &argv![elem]);
37}Sourcepub const fn undefined() -> Val
pub const fn undefined() -> Val
Gets a js undefined Val
Examples found in repository?
examples/dom.rs (line 18)
3fn main() {
4 let document = Val::global("document");
5 let elem = document.call("createElement", &argv!["BUTTON"]);
6 elem.set("textContent", Val::from("Click"));
7 let body = document.call("getElementsByTagName", &argv!["body"]).at(0);
8 elem.call(
9 "addEventListener",
10 &argv![
11 "click",
12 Val::make_fn(|ev| {
13 let console = Console::get();
14 console.call("clear", &[]);
15 console.log(&[ev[0].get("clientX")]);
16 println!("client x: {}", ev[0].get("clientX").as_::<i32>());
17 println!("hello from Rust");
18 Val::undefined()
19 })
20 ],
21 );
22 body.call("appendChild", &argv![elem]);
23}More examples
examples/audio.rs (line 32)
3fn main() {
4 #[allow(non_snake_case)]
5 let mut AudioContext = Val::global("AudioContext");
6 if !AudioContext.as_::<bool>() {
7 println!("No global AudioContext, trying webkitAudioContext");
8 AudioContext = Val::global("webkitAudioContext");
9 }
10
11 println!("Got an AudioContext");
12 let context = AudioContext.new(&[]);
13 let oscillator = context.call("createOscillator", &[]);
14
15 println!("Configuring oscillator");
16 oscillator.set("type", "triangle");
17 oscillator.get("frequency").set::<_, f64>("value", 261.63); // Middle C
18
19 let document = Val::global("document");
20 let elem = document.call("createElement", &argv!["BUTTON"]);
21 elem.set("textContent", "Click");
22 let body = document.call("getElementsByTagName", &argv!["body"]).at(0);
23 elem.call(
24 "addEventListener",
25 &argv![
26 "click",
27 Val::make_fn(move |_| {
28 println!("Playing");
29 oscillator.call("connect", &argv![context.get("destination")]);
30 oscillator.call("start", &argv![0]);
31 println!("All done!");
32 Val::undefined()
33 })
34 ],
35 );
36 body.call("appendChild", &argv![elem]);
37}Sourcepub fn set<K: Into<Val>, V: Into<Val>>(&self, prop: K, val: V)
pub fn set<K: Into<Val>, V: Into<Val>>(&self, prop: K, val: V)
Set the underlying js object property prop to val
Examples found in repository?
examples/dom.rs (line 6)
3fn main() {
4 let document = Val::global("document");
5 let elem = document.call("createElement", &argv!["BUTTON"]);
6 elem.set("textContent", Val::from("Click"));
7 let body = document.call("getElementsByTagName", &argv!["body"]).at(0);
8 elem.call(
9 "addEventListener",
10 &argv![
11 "click",
12 Val::make_fn(|ev| {
13 let console = Console::get();
14 console.call("clear", &[]);
15 console.log(&[ev[0].get("clientX")]);
16 println!("client x: {}", ev[0].get("clientX").as_::<i32>());
17 println!("hello from Rust");
18 Val::undefined()
19 })
20 ],
21 );
22 body.call("appendChild", &argv![elem]);
23}More examples
examples/audio.rs (line 16)
3fn main() {
4 #[allow(non_snake_case)]
5 let mut AudioContext = Val::global("AudioContext");
6 if !AudioContext.as_::<bool>() {
7 println!("No global AudioContext, trying webkitAudioContext");
8 AudioContext = Val::global("webkitAudioContext");
9 }
10
11 println!("Got an AudioContext");
12 let context = AudioContext.new(&[]);
13 let oscillator = context.call("createOscillator", &[]);
14
15 println!("Configuring oscillator");
16 oscillator.set("type", "triangle");
17 oscillator.get("frequency").set::<_, f64>("value", 261.63); // Middle C
18
19 let document = Val::global("document");
20 let elem = document.call("createElement", &argv!["BUTTON"]);
21 elem.set("textContent", "Click");
22 let body = document.call("getElementsByTagName", &argv!["body"]).at(0);
23 elem.call(
24 "addEventListener",
25 &argv![
26 "click",
27 Val::make_fn(move |_| {
28 println!("Playing");
29 oscillator.call("connect", &argv![context.get("destination")]);
30 oscillator.call("start", &argv![0]);
31 println!("All done!");
32 Val::undefined()
33 })
34 ],
35 );
36 body.call("appendChild", &argv![elem]);
37}Sourcepub fn has_own_property(&self, prop: &str) -> bool
pub fn has_own_property(&self, prop: &str) -> bool
Checks whether a non-inherited property prop exists
Sourcepub fn at<T: Into<Val>>(&self, idx: T) -> Val
pub fn at<T: Into<Val>>(&self, idx: T) -> Val
Gets the element at index idx. Assumes the underlying js type is indexable
Examples found in repository?
examples/dom.rs (line 7)
3fn main() {
4 let document = Val::global("document");
5 let elem = document.call("createElement", &argv!["BUTTON"]);
6 elem.set("textContent", Val::from("Click"));
7 let body = document.call("getElementsByTagName", &argv!["body"]).at(0);
8 elem.call(
9 "addEventListener",
10 &argv![
11 "click",
12 Val::make_fn(|ev| {
13 let console = Console::get();
14 console.call("clear", &[]);
15 console.log(&[ev[0].get("clientX")]);
16 println!("client x: {}", ev[0].get("clientX").as_::<i32>());
17 println!("hello from Rust");
18 Val::undefined()
19 })
20 ],
21 );
22 body.call("appendChild", &argv![elem]);
23}More examples
examples/audio.rs (line 22)
3fn main() {
4 #[allow(non_snake_case)]
5 let mut AudioContext = Val::global("AudioContext");
6 if !AudioContext.as_::<bool>() {
7 println!("No global AudioContext, trying webkitAudioContext");
8 AudioContext = Val::global("webkitAudioContext");
9 }
10
11 println!("Got an AudioContext");
12 let context = AudioContext.new(&[]);
13 let oscillator = context.call("createOscillator", &[]);
14
15 println!("Configuring oscillator");
16 oscillator.set("type", "triangle");
17 oscillator.get("frequency").set::<_, f64>("value", 261.63); // Middle C
18
19 let document = Val::global("document");
20 let elem = document.call("createElement", &argv!["BUTTON"]);
21 elem.set("textContent", "Click");
22 let body = document.call("getElementsByTagName", &argv!["body"]).at(0);
23 elem.call(
24 "addEventListener",
25 &argv![
26 "click",
27 Val::make_fn(move |_| {
28 println!("Playing");
29 oscillator.call("connect", &argv![context.get("destination")]);
30 oscillator.call("start", &argv![0]);
31 println!("All done!");
32 Val::undefined()
33 })
34 ],
35 );
36 body.call("appendChild", &argv![elem]);
37}Sourcepub fn call(&self, f: &str, args: &[Val]) -> Val
pub fn call(&self, f: &str, args: &[Val]) -> Val
Calls the method f with args, can return an undefined js value
Examples found in repository?
examples/bind.rs (line 28)
27 fn print(&self) {
28 self.val.call("print", &[]);
29 }
30}
31
32impl FromVal for MyJsClass {
33 fn from_val(v: &Val) -> Self {
34 MyJsClass { val: v.clone() }
35 }
36 fn take_ownership(v: Handle) -> Self {
37 Self::from_val(&Val::take_ownership(v))
38 }
39 fn as_handle(&self) -> Handle {
40 self.val.as_handle()
41 }
42}
43
44impl Deref for MyJsClass {
45 type Target = Val;
46
47 fn deref(&self) -> &Self::Target {
48 &self.val
49 }
50}
51
52impl DerefMut for MyJsClass {
53 fn deref_mut(&mut self) -> &mut Self::Target {
54 &mut self.val
55 }
56}
57
58impl From<MyJsClass> for Val {
59 fn from(s: MyJsClass) -> Val {
60 let handle = s.as_handle();
61 std::mem::forget(s);
62 Val::take_ownership(handle)
63 }
64}
65
66fn main() {
67 MyJsClass::define();
68 let c = MyJsClass::new(5, 6);
69 c.call("print", &[]);
70 let b = eval!(
71 r#"
72 let b = new MyJsClass(6, 7);
73 b.print();
74 b
75 "#
76 );
77 let a = b.as_::<MyJsClass>();
78 a.print();
79 let console = Console::get();
80 console.log(&[a.into()]);
81}More examples
examples/dom.rs (line 5)
3fn main() {
4 let document = Val::global("document");
5 let elem = document.call("createElement", &argv!["BUTTON"]);
6 elem.set("textContent", Val::from("Click"));
7 let body = document.call("getElementsByTagName", &argv!["body"]).at(0);
8 elem.call(
9 "addEventListener",
10 &argv![
11 "click",
12 Val::make_fn(|ev| {
13 let console = Console::get();
14 console.call("clear", &[]);
15 console.log(&[ev[0].get("clientX")]);
16 println!("client x: {}", ev[0].get("clientX").as_::<i32>());
17 println!("hello from Rust");
18 Val::undefined()
19 })
20 ],
21 );
22 body.call("appendChild", &argv![elem]);
23}examples/audio.rs (line 13)
3fn main() {
4 #[allow(non_snake_case)]
5 let mut AudioContext = Val::global("AudioContext");
6 if !AudioContext.as_::<bool>() {
7 println!("No global AudioContext, trying webkitAudioContext");
8 AudioContext = Val::global("webkitAudioContext");
9 }
10
11 println!("Got an AudioContext");
12 let context = AudioContext.new(&[]);
13 let oscillator = context.call("createOscillator", &[]);
14
15 println!("Configuring oscillator");
16 oscillator.set("type", "triangle");
17 oscillator.get("frequency").set::<_, f64>("value", 261.63); // Middle C
18
19 let document = Val::global("document");
20 let elem = document.call("createElement", &argv!["BUTTON"]);
21 elem.set("textContent", "Click");
22 let body = document.call("getElementsByTagName", &argv!["body"]).at(0);
23 elem.call(
24 "addEventListener",
25 &argv![
26 "click",
27 Val::make_fn(move |_| {
28 println!("Playing");
29 oscillator.call("connect", &argv![context.get("destination")]);
30 oscillator.call("start", &argv![0]);
31 println!("All done!");
32 Val::undefined()
33 })
34 ],
35 );
36 body.call("appendChild", &argv![elem]);
37}Sourcepub fn new(&self, args: &[Val]) -> Val
pub fn new(&self, args: &[Val]) -> Val
Calls the object’s constructor with args constructing a new object
Examples found in repository?
More examples
examples/audio.rs (line 12)
3fn main() {
4 #[allow(non_snake_case)]
5 let mut AudioContext = Val::global("AudioContext");
6 if !AudioContext.as_::<bool>() {
7 println!("No global AudioContext, trying webkitAudioContext");
8 AudioContext = Val::global("webkitAudioContext");
9 }
10
11 println!("Got an AudioContext");
12 let context = AudioContext.new(&[]);
13 let oscillator = context.call("createOscillator", &[]);
14
15 println!("Configuring oscillator");
16 oscillator.set("type", "triangle");
17 oscillator.get("frequency").set::<_, f64>("value", 261.63); // Middle C
18
19 let document = Val::global("document");
20 let elem = document.call("createElement", &argv!["BUTTON"]);
21 elem.set("textContent", "Click");
22 let body = document.call("getElementsByTagName", &argv!["body"]).at(0);
23 elem.call(
24 "addEventListener",
25 &argv![
26 "click",
27 Val::make_fn(move |_| {
28 println!("Playing");
29 oscillator.call("connect", &argv![context.get("destination")]);
30 oscillator.call("start", &argv![0]);
31 println!("All done!");
32 Val::undefined()
33 })
34 ],
35 );
36 body.call("appendChild", &argv![elem]);
37}Sourcepub fn invoke(&self, args: &[Val]) -> Val
pub fn invoke(&self, args: &[Val]) -> Val
Invokes the function object with args, can return an undefined js value
Sourcepub fn make_fn_raw(f: fn(Handle, Handle) -> Handle, data: Handle) -> Val
pub fn make_fn_raw(f: fn(Handle, Handle) -> Handle, data: Handle) -> Val
Creates js function from a function pointer and returns its handle wrapped in a Val object
Sourcepub fn make_fn<F: FnMut(&[Val]) -> Val>(cb: F) -> Val
pub fn make_fn<F: FnMut(&[Val]) -> Val>(cb: F) -> Val
Creates a js function from a Rust closure and returns a Val
Examples found in repository?
examples/dom.rs (lines 12-19)
3fn main() {
4 let document = Val::global("document");
5 let elem = document.call("createElement", &argv!["BUTTON"]);
6 elem.set("textContent", Val::from("Click"));
7 let body = document.call("getElementsByTagName", &argv!["body"]).at(0);
8 elem.call(
9 "addEventListener",
10 &argv![
11 "click",
12 Val::make_fn(|ev| {
13 let console = Console::get();
14 console.call("clear", &[]);
15 console.log(&[ev[0].get("clientX")]);
16 println!("client x: {}", ev[0].get("clientX").as_::<i32>());
17 println!("hello from Rust");
18 Val::undefined()
19 })
20 ],
21 );
22 body.call("appendChild", &argv![elem]);
23}More examples
examples/audio.rs (lines 27-33)
3fn main() {
4 #[allow(non_snake_case)]
5 let mut AudioContext = Val::global("AudioContext");
6 if !AudioContext.as_::<bool>() {
7 println!("No global AudioContext, trying webkitAudioContext");
8 AudioContext = Val::global("webkitAudioContext");
9 }
10
11 println!("Got an AudioContext");
12 let context = AudioContext.new(&[]);
13 let oscillator = context.call("createOscillator", &[]);
14
15 println!("Configuring oscillator");
16 oscillator.set("type", "triangle");
17 oscillator.get("frequency").set::<_, f64>("value", 261.63); // Middle C
18
19 let document = Val::global("document");
20 let elem = document.call("createElement", &argv!["BUTTON"]);
21 elem.set("textContent", "Click");
22 let body = document.call("getElementsByTagName", &argv!["body"]).at(0);
23 elem.call(
24 "addEventListener",
25 &argv![
26 "click",
27 Val::make_fn(move |_| {
28 println!("Playing");
29 oscillator.call("connect", &argv![context.get("destination")]);
30 oscillator.call("start", &argv![0]);
31 println!("All done!");
32 Val::undefined()
33 })
34 ],
35 );
36 body.call("appendChild", &argv![elem]);
37}Sourcepub fn instanceof(&self, v: Val) -> bool
pub fn instanceof(&self, v: Val) -> bool
Checks whether this Val is an instanceof v
pub fn is_number(&self) -> bool
pub fn is_string(&self) -> bool
pub fn is_null(&self) -> bool
pub fn is_undefined(&self) -> bool
pub fn is_error(&self) -> bool
pub fn is_function(&self) -> bool
Sourcepub fn as_<T>(&self) -> Twhere
T: FromVal,
pub fn as_<T>(&self) -> Twhere
T: FromVal,
Examples found in repository?
examples/bind.rs (line 77)
66fn main() {
67 MyJsClass::define();
68 let c = MyJsClass::new(5, 6);
69 c.call("print", &[]);
70 let b = eval!(
71 r#"
72 let b = new MyJsClass(6, 7);
73 b.print();
74 b
75 "#
76 );
77 let a = b.as_::<MyJsClass>();
78 a.print();
79 let console = Console::get();
80 console.log(&[a.into()]);
81}More examples
examples/dom.rs (line 16)
3fn main() {
4 let document = Val::global("document");
5 let elem = document.call("createElement", &argv!["BUTTON"]);
6 elem.set("textContent", Val::from("Click"));
7 let body = document.call("getElementsByTagName", &argv!["body"]).at(0);
8 elem.call(
9 "addEventListener",
10 &argv![
11 "click",
12 Val::make_fn(|ev| {
13 let console = Console::get();
14 console.call("clear", &[]);
15 console.log(&[ev[0].get("clientX")]);
16 println!("client x: {}", ev[0].get("clientX").as_::<i32>());
17 println!("hello from Rust");
18 Val::undefined()
19 })
20 ],
21 );
22 body.call("appendChild", &argv![elem]);
23}examples/audio.rs (line 6)
3fn main() {
4 #[allow(non_snake_case)]
5 let mut AudioContext = Val::global("AudioContext");
6 if !AudioContext.as_::<bool>() {
7 println!("No global AudioContext, trying webkitAudioContext");
8 AudioContext = Val::global("webkitAudioContext");
9 }
10
11 println!("Got an AudioContext");
12 let context = AudioContext.new(&[]);
13 let oscillator = context.call("createOscillator", &[]);
14
15 println!("Configuring oscillator");
16 oscillator.set("type", "triangle");
17 oscillator.get("frequency").set::<_, f64>("value", 261.63); // Middle C
18
19 let document = Val::global("document");
20 let elem = document.call("createElement", &argv!["BUTTON"]);
21 elem.set("textContent", "Click");
22 let body = document.call("getElementsByTagName", &argv!["body"]).at(0);
23 elem.call(
24 "addEventListener",
25 &argv![
26 "click",
27 Val::make_fn(move |_| {
28 println!("Playing");
29 oscillator.call("connect", &argv![context.get("destination")]);
30 oscillator.call("start", &argv![0]);
31 println!("All done!");
32 Val::undefined()
33 })
34 ],
35 );
36 body.call("appendChild", &argv![elem]);
37}Trait Implementations§
Auto Trait Implementations§
impl Freeze for Val
impl RefUnwindSafe for Val
impl Send for Val
impl Sync for Val
impl Unpin for Val
impl UnwindSafe for Val
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more