lavalink_rs/python/
node.rs1use 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}