libobs_wrapper\graphics/
vec2.rs

1use getters0::Getters;
2
3#[derive(Debug, Clone, Copy, Getters)]
4pub struct Vec2 {
5    #[get_mut]
6    x: f32,
7    #[get_mut]
8    y: f32,
9}
10
11impl From<libobs::vec2> for Vec2 {
12    fn from(raw: libobs::vec2) -> Self {
13        // SAFETY: libobs::vec2 is a C representation with a known layout, the __bindgen_anon_1 must be set
14        let inner = unsafe { raw.__bindgen_anon_1.__bindgen_anon_1 };
15        Self {
16            x: inner.x,
17            y: inner.y,
18        }
19    }
20}
21
22impl From<Vec2> for libobs::vec2 {
23    fn from(val: Vec2) -> Self {
24        libobs::vec2 {
25            __bindgen_anon_1: libobs::vec2__bindgen_ty_1 {
26                __bindgen_anon_1: libobs::vec2__bindgen_ty_1__bindgen_ty_1 { x: val.x, y: val.y },
27            },
28        }
29    }
30}
31
32#[test]
33fn test_vec2() {
34    let vec_val = Vec2::new(1.0, 2.0);
35    let libobs_vec: libobs::vec2 = vec_val.into();
36
37    let original = Vec2::from(libobs_vec);
38    assert_eq!(original.x, 1.0);
39    assert_eq!(original.y, 2.0);
40    assert_ne!(original.x, 0.0);
41    assert_ne!(original.y, 0.0);
42}
43
44#[test]
45fn test_vec2_new() {
46    let vec = Vec2::new(3.5, 4.5);
47    assert_eq!(vec.x, 3.5);
48    assert_eq!(vec.y, 4.5);
49}
50
51#[test]
52fn test_vec2_clone() {
53    let vec1 = Vec2::new(1.0, 2.0);
54    #[allow(clippy::clone_on_copy)]
55    let vec2 = vec1.clone();
56    assert_eq!(vec1.x, vec2.x);
57    assert_eq!(vec1.y, vec2.y);
58}
59
60#[test]
61fn test_vec2_copy() {
62    let vec1 = Vec2::new(1.0, 2.0);
63    let vec2 = vec1; // Copy, not move
64    assert_eq!(vec1.x, vec2.x);
65    assert_eq!(vec1.y, vec2.y);
66}
67
68#[test]
69fn test_vec2_debug() {
70    let vec = Vec2::new(1.0, 2.0);
71    let debug_str = format!("{:?}", vec);
72    assert!(debug_str.contains("Vec2"));
73}