1use wasm_bindgen::prelude::*;
2
3#[wasm_bindgen]
4extern "C" {
5 #[derive(Debug)]
6 pub type Point;
7
8 #[wasm_bindgen(constructor, js_namespace = L)]
9 pub fn new(x: f64, y: f64) -> Point;
10
11 #[wasm_bindgen(method, getter)]
12 pub fn x(this: &Point) -> f64;
13
14 #[wasm_bindgen(method, getter)]
15 pub fn y(this: &Point) -> f64;
16
17 #[wasm_bindgen(method)]
18 pub fn add(this: &Point, other: &Point) -> Point;
19
20 #[wasm_bindgen(method)]
21 pub fn subtract(this: &Point, other: &Point) -> Point;
22
23 #[wasm_bindgen(method, js_name = multiplyBy)]
24 pub fn multiply_by(this: &Point, scalar: f64) -> Point;
25
26 #[wasm_bindgen(method, js_name = divideBy)]
27 pub fn divide_by(this: &Point, scalar: f64) -> Point;
28
29 #[wasm_bindgen(method, js_name = scaleBy)]
30 pub fn scale_by(this: &Point, other: &Point) -> Point;
31
32 #[wasm_bindgen(method, js_name = unscaleByTo)]
33 pub fn unscale_by_to(this: &Point, other: &Point) -> Point;
34
35 #[wasm_bindgen(method)]
36 pub fn round(this: &Point) -> Point;
37
38 #[wasm_bindgen(method)]
39 pub fn floor(this: &Point) -> Point;
40
41 #[wasm_bindgen(method)]
42 pub fn ceil(this: &Point) -> Point;
43
44 #[wasm_bindgen(method)]
45 pub fn trunc(this: &Point) -> bool;
46
47 #[wasm_bindgen(method)]
48 pub fn equals(this: &Point, other: &Point) -> bool;
49
50 #[wasm_bindgen(method)]
51 pub fn contains(this: &Point, other: &Point) -> f64;
52
53 #[wasm_bindgen(method, js_name = distanceTo)]
54 pub fn distance_to(this: &Point, other: &Point) -> f64;
55}
56
57impl From<(u32, u32)> for Point {
58 fn from((x, y): (u32, u32)) -> Point {
59 Point::new(f64::from(x), f64::from(y))
60 }
61}
62
63impl From<(f64, f64)> for Point {
64 fn from((x, y): (f64, f64)) -> Point {
65 Point::new(x, y)
66 }
67}