mirror of
https://github.com/hexedtech/codemp.git
synced 2024-11-22 15:24:48 +01:00
feat(python): fixed macro and expanded to workplace methods
This commit is contained in:
parent
feff54bcdf
commit
4a575c587f
3 changed files with 42 additions and 52 deletions
|
@ -13,16 +13,17 @@ impl Client {
|
|||
|
||||
#[pyo3(name = "join_workspace")]
|
||||
fn pyjoin_workspace(&self, workspace: String) -> PyResult<super::RustPromise> {
|
||||
tracing::info!("attempting to join the workspace {workspace}");
|
||||
tracing::info!("attempting to join the workspace {}", workspace);
|
||||
|
||||
// crate::a_sync! { self => self.join_workspace(workspace).await }
|
||||
let rc = self.clone();
|
||||
Ok(super::RustPromise(Some(tokio().spawn(async move {
|
||||
Ok(rc
|
||||
.join_workspace(workspace)
|
||||
.await
|
||||
.map(|f| Python::with_gil(|py| f.into_py(py)))?)
|
||||
}))))
|
||||
let this = self.clone();
|
||||
crate::a_sync!(this.join_workspace(workspace).await)
|
||||
// let rc = self.clone();
|
||||
// Ok(super::RustPromise(Some(tokio().spawn(async move {
|
||||
// Ok(rc
|
||||
// .join_workspace(workspace)
|
||||
// .await
|
||||
// .map(|f| Python::with_gil(|py| f.into_py(py)))?)
|
||||
// }))))
|
||||
}
|
||||
|
||||
#[pyo3(name = "leave_workspace")]
|
||||
|
|
|
@ -61,22 +61,13 @@ pub fn tokio() -> &'static tokio::runtime::Runtime {
|
|||
|
||||
#[macro_export]
|
||||
macro_rules! a_sync {
|
||||
($($clone:ident)* => $x:expr) => {
|
||||
{
|
||||
$(let $clone = $clone.clone();)*
|
||||
Ok($crate::ffi::python::RustPromise(Some($crate::ffi::python::tokio().spawn(async move {
|
||||
Ok($x.map(|f| Python::with_gil(|py| f.into_py(py)))?)
|
||||
}))))
|
||||
($x:expr) => {{
|
||||
Ok($crate::ffi::python::RustPromise(Some(
|
||||
$crate::ffi::python::tokio()
|
||||
.spawn(async move { Ok($x.map(|f| Python::with_gil(|py| f.into_py(py)))?) }),
|
||||
)))
|
||||
}};
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
// #[macro_export]
|
||||
// macro_rules! spawn_future {
|
||||
// ($fut:expr) => {
|
||||
// $crate::ffi::python::tokio().spawn(async move { $fut.await })
|
||||
// };
|
||||
// }
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
struct LoggerProducer(mpsc::UnboundedSender<String>);
|
||||
|
|
|
@ -3,23 +3,23 @@ use crate::cursor::Controller as CursorController;
|
|||
use crate::workspace::Workspace;
|
||||
use pyo3::prelude::*;
|
||||
|
||||
use crate::spawn_future;
|
||||
|
||||
use super::RustPromise;
|
||||
use crate::a_sync;
|
||||
// use super::Promise;
|
||||
|
||||
#[pymethods]
|
||||
impl Workspace {
|
||||
// join a workspace
|
||||
#[pyo3(name = "create")]
|
||||
async fn pycreate(&self, path: String) -> crate::Result<()> {
|
||||
let rc = self.clone();
|
||||
spawn_future!(rc.create(path.as_str())).await.unwrap()
|
||||
fn pycreate(&self, path: String) -> PyResult<RustPromise> {
|
||||
let this = self.clone();
|
||||
a_sync!(this.create(path.as_str()).await)
|
||||
}
|
||||
|
||||
#[pyo3(name = "attach")]
|
||||
async fn pyattach(&self, path: String) -> crate::Result<BufferController> {
|
||||
let rc = self.clone();
|
||||
spawn_future!(rc.attach(path.as_str())).await.unwrap()
|
||||
fn pyattach(&self, path: String) -> PyResult<RustPromise> {
|
||||
let this = self.clone();
|
||||
a_sync!(this.attach(path.as_str()).await)
|
||||
}
|
||||
|
||||
#[pyo3(name = "detach")]
|
||||
|
@ -31,37 +31,35 @@ impl Workspace {
|
|||
}
|
||||
}
|
||||
|
||||
// #[pyo3(name = "event")]
|
||||
// fn pyevent(&self) -> Promise {
|
||||
// crate::a_sync! { self =>
|
||||
// self.event().await
|
||||
// }
|
||||
// }
|
||||
#[pyo3(name = "event")]
|
||||
fn pyevent(&self) -> PyResult<RustPromise> {
|
||||
let this = self.clone();
|
||||
a_sync!(this.event().await)
|
||||
}
|
||||
|
||||
#[pyo3(name = "fetch_buffers")]
|
||||
async fn pyfetch_buffers(&self) -> crate::Result<()> {
|
||||
let rc = self.clone();
|
||||
spawn_future!(rc.fetch_buffers()).await.unwrap()
|
||||
fn pyfetch_buffers(&self) -> PyResult<RustPromise> {
|
||||
let this = self.clone();
|
||||
a_sync!(this.fetch_buffers().await)
|
||||
}
|
||||
|
||||
#[pyo3(name = "fetch_users")]
|
||||
async fn pyfetch_users(&self) -> crate::Result<()> {
|
||||
let rc = self.clone();
|
||||
spawn_future!(rc.fetch_users()).await.unwrap()
|
||||
fn pyfetch_users(&self) -> PyResult<RustPromise> {
|
||||
let this = self.clone();
|
||||
a_sync!(this.fetch_users().await)
|
||||
}
|
||||
|
||||
#[pyo3(name = "list_buffer_users")]
|
||||
async fn pylist_buffer_users(&self, path: String) -> crate::Result<Vec<crate::api::User>> {
|
||||
let rc = self.clone();
|
||||
spawn_future!(rc.list_buffer_users(path.as_str()))
|
||||
.await
|
||||
.unwrap()
|
||||
fn pylist_buffer_users(&self, path: String) -> PyResult<RustPromise> {
|
||||
// crate::Result<Vec<crate::api::User>> {
|
||||
let this = self.clone();
|
||||
a_sync!(this.list_buffer_users(path.as_str()).await)
|
||||
}
|
||||
|
||||
#[pyo3(name = "delete")]
|
||||
async fn pydelete(&self, path: String) -> crate::Result<()> {
|
||||
let rc = self.clone();
|
||||
spawn_future!(rc.delete(path.as_str())).await.unwrap()
|
||||
fn pydelete(&self, path: String) -> PyResult<RustPromise> {
|
||||
let this = self.clone();
|
||||
a_sync!(this.delete(path.as_str()).await)
|
||||
}
|
||||
|
||||
#[pyo3(name = "id")]
|
||||
|
|
Loading…
Reference in a new issue