lavalink_rs/python/
node.rs

1use crate::model::events::Events;
2
3use std::sync::Arc;
4
5use pyo3::prelude::*;
6
7#[pymodule]
8pub fn node(_py: Python<'_>, m: &Bound<'_, PyModule>) -> PyResult<()> {
9    m.add_class::<Node>()?;
10    m.add_class::<crate::node::NodeBuilder>()?;
11
12    Ok(())
13}
14
15#[pyclass]
16#[derive(Clone)]
17pub(crate) struct Node {
18    pub(crate) inner: Arc<crate::node::Node>,
19}
20
21#[pymethods]
22impl Node {
23    #[getter]
24    fn http(&self) -> super::http::Http {
25        super::http::Http {
26            inner: self.inner.http.clone(),
27        }
28    }
29}
30
31#[apply(super::with_getter_setter)]
32#[pymethods]
33impl crate::node::NodeBuilder {
34    getter_setter!(
35        (hostname, String),
36        (is_ssl, bool),
37        (password, String),
38        (user_id, crate::model::UserId),
39        (session_id, Option<String>),
40    );
41
42    #[new]
43    #[pyo3(signature = (hostname, is_ssl, password, user_id, session_id=None, events=None))]
44    fn new(
45        py: Python<'_>,
46        hostname: String,
47        is_ssl: bool,
48        password: String,
49        user_id: super::model::PyUserId,
50        session_id: Option<String>,
51        events: Option<PyObject>,
52    ) -> PyResult<Self> {
53        let events = if let Some(events) = events {
54            let current_loop = pyo3_async_runtimes::get_running_loop(py)?;
55            let loop_ref = PyObject::from(current_loop);
56
57            let event_handler = crate::python::event::EventHandler {
58                inner: events,
59                current_loop: loop_ref,
60            };
61
62            Events {
63                event_handler: Some(event_handler),
64                ..Default::default()
65            }
66        } else {
67            Events::default()
68        };
69
70        Ok(crate::node::NodeBuilder {
71            hostname,
72            is_ssl,
73            events,
74            password,
75            user_id: user_id.into(),
76            session_id,
77        })
78    }
79}