diff --git a/Cargo.toml b/Cargo.toml index 70283ad..ba0fdc2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,6 +7,10 @@ edition = "2021" default = ["nvim"] nvim = [] +[lib] +name = "library" +path = "src/lib/lib.rs" + [[bin]] # Bin to run the CodeMP gRPC server name = "server" path = "src/server/main.rs" @@ -27,6 +31,7 @@ rmpv = "1" operational-transform = "0.6" nvim-rs = { version = "0.4", features = ["use_tokio"] } # TODO put this behind a conditional feature uuid = { version = "1", features = ["v4", "fast-rng", "macro-diagnostics"] } +rand = "0.8.5" [build-dependencies] tonic-build = "0.7" diff --git a/src/server/events.rs b/src/lib/events.rs similarity index 98% rename from src/server/events.rs rename to src/lib/events.rs index 53551a6..2d01ad8 100644 --- a/src/server/events.rs +++ b/src/lib/events.rs @@ -1,5 +1,5 @@ use std::fmt::Display; -use crate::actor::state::User; +use crate::user::User; #[derive(Debug, Clone)] pub enum Event { diff --git a/src/lib/lib.rs b/src/lib/lib.rs new file mode 100644 index 0000000..84e0b84 --- /dev/null +++ b/src/lib/lib.rs @@ -0,0 +1,2 @@ +pub mod events; +pub mod user; diff --git a/src/lib/user.rs b/src/lib/user.rs new file mode 100644 index 0000000..0e80f53 --- /dev/null +++ b/src/lib/user.rs @@ -0,0 +1,27 @@ +use std::fmt::Display; + +#[derive(Debug, Clone)] +pub struct UserCursor{ + pub buffer: i64, + pub x: i64, + pub y: i64 +} + +impl Display for UserCursor { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "Cursor(buffer:{}, x:{}, y:{})", self.buffer, self.x, self.y) + } +} + + +#[derive(Debug, Clone)] +pub struct User { + pub name: String, + pub cursor: UserCursor, +} + +impl Display for User { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "User(name:{}, cursor:{})", self.name, self.cursor) + } +} diff --git a/src/server/actor/buffer.rs b/src/server/actor/buffer.rs index 2526ea4..0538e4e 100644 --- a/src/server/actor/buffer.rs +++ b/src/server/actor/buffer.rs @@ -2,7 +2,7 @@ use operational_transform::OperationSeq; use tokio::sync::{broadcast, mpsc, watch}; use tracing::error; -use crate::events::Event; +use library::events::Event; #[derive(Debug, Clone)] /// A view of a buffer, with references to access value and send operations diff --git a/src/server/actor/state.rs b/src/server/actor/state.rs index e2094d6..4d27aca 100644 --- a/src/server/actor/state.rs +++ b/src/server/actor/state.rs @@ -5,32 +5,6 @@ use tracing::error; use crate::actor::workspace::Workspace; -#[derive(Debug, Clone)] -pub struct UserCursor{ - pub buffer: i32, - pub x: i32, - pub y: i32 -} - -impl Display for UserCursor { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "Cursor(buffer:{}, x:{}, y:{})", self.buffer, self.x, self.y) - } -} - - -#[derive(Debug, Clone)] -pub struct User { - pub name: String, - pub cursor: UserCursor, -} - -impl Display for User { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "User(name:{}, cursor:{})", self.name, self.cursor) - } -} - #[derive(Debug)] enum WorkspaceAction { diff --git a/src/server/actor/workspace.rs b/src/server/actor/workspace.rs index d7e84d9..19c8500 100644 --- a/src/server/actor/workspace.rs +++ b/src/server/actor/workspace.rs @@ -3,7 +3,7 @@ use std::collections::HashMap; use tokio::sync::{broadcast, mpsc, watch::{self, Ref}}; use tracing::warn; -use crate::{events::Event, service::workspace::proto::CursorUpdate}; +use library::{events::Event, user::{User, UserCursor}}; use super::{buffer::{BufferView, Buffer}, state::{User, UserCursor}}; diff --git a/src/server/main.rs b/src/server/main.rs index a217e14..e74133d 100644 --- a/src/server/main.rs +++ b/src/server/main.rs @@ -5,7 +5,6 @@ //! pub mod actor; -pub mod events; pub mod service; use std::sync::Arc; diff --git a/src/server/service/buffer.rs b/src/server/service/buffer.rs index 723bf47..3f90732 100644 --- a/src/server/service/buffer.rs +++ b/src/server/service/buffer.rs @@ -11,6 +11,8 @@ pub mod proto { tonic::include_proto!("buffer"); } +use library::events::Event; + use tokio::sync::{broadcast, mpsc}; use tokio_stream::{Stream, StreamExt}; // TODO example used this? @@ -21,7 +23,6 @@ use tonic::Streaming; //use futures::{Stream, StreamExt}; use crate::actor::{buffer::BufferView, state::StateManager}; -use crate::events::Event; use self::proto::{BufferPayload, BufferResponse}; // TODO fuck x2! diff --git a/src/server/service/workspace.rs b/src/server/service/workspace.rs index 9897b22..9503ba0 100644 --- a/src/server/service/workspace.rs +++ b/src/server/service/workspace.rs @@ -12,13 +12,15 @@ pub mod proto { tonic::include_proto!("workspace"); } +use library::user::User; + use tokio_stream::{Stream, StreamExt}; // TODO example used this? use proto::workspace_server::{Workspace, WorkspaceServer}; use proto::{BufferList, WorkspaceEvent, WorkspaceRequest, WorkspaceResponse, UsersList, BufferRequest, CursorUpdate, JoinRequest}; -use crate::actor::state::UserCursor; -use crate::actor::{buffer::Buffer, state::StateManager, workspace::Workspace as WorkspaceInstance}; // TODO fuck x2! +use library::user::UserCursor; +use crate::actor::{buffer::Buffer, state::StateManager}; // TODO fuck x2! pub struct WorkspaceExtension { pub id: String @@ -86,7 +88,7 @@ impl Workspace for WorkspaceService { let mut event_receiver = w.bus.subscribe(); w.view().users.add( crate::actor::state::User { - name: r.name.clone(), + name: "some-name".to_string(), // get from request cursor: UserCursor { buffer:0, x:0, y:0 } } );