diff --git a/src/api/mod.rs b/src/api/mod.rs index 79dba09..813b298 100644 --- a/src/api/mod.rs +++ b/src/api/mod.rs @@ -13,7 +13,11 @@ pub mod change; /// representation for an user's cursor pub mod cursor; +/// data structure for service users +pub mod user; + pub use controller::Controller; pub use change::TextChange; pub use change::Op; pub use cursor::Cursor; +pub use user::User; diff --git a/src/api/user.rs b/src/api/user.rs new file mode 100644 index 0000000..453bf2c --- /dev/null +++ b/src/api/user.rs @@ -0,0 +1,29 @@ +//! # User +//! +//! data structures for our service users + +use uuid::Uuid; + +/// represents a service user +/// +/// all users are identified uniquely with UUIDs +#[derive(Debug, Clone)] +pub struct User { + pub id: Uuid, +} + +impl From for User { + fn from(value: codemp_proto::common::Identity) -> Self { + Self { + id: uuid::Uuid::parse_str(&value.id).expect("invalid uuid"), + } + } +} + +impl From for codemp_proto::common::Identity { + fn from(value: User) -> Self { + Self { + id: value.id.to_string(), + } + } +} diff --git a/src/prelude.rs b/src/prelude.rs index 064d395..f556f7d 100644 --- a/src/prelude.rs +++ b/src/prelude.rs @@ -12,12 +12,15 @@ pub use crate::api::{ TextChange as CodempTextChange, Cursor as CodempCursor, Op as CodempOp, + User as CodempUser, }; pub use crate::{ client::Client as CodempClient, workspace::Workspace as CodempWorkspace, - workspace::UserInfo as CodempUserInfo, cursor::Controller as CodempCursorController, buffer::Controller as CodempBufferController, }; + +#[deprecated = "use CodempUser instead"] +pub use crate::api::user::User as CodempUserInfo;