2024-08-05 19:15:30 +02:00
|
|
|
//! # Cursor
|
|
|
|
//!
|
|
|
|
//! represents the position of an user's cursor, with
|
|
|
|
//! information about their identity
|
|
|
|
|
|
|
|
use codemp_proto as proto;
|
2024-08-05 22:44:46 +02:00
|
|
|
use uuid::Uuid;
|
2024-08-05 19:15:30 +02:00
|
|
|
|
2024-08-09 00:00:21 +02:00
|
|
|
#[cfg(feature = "python")]
|
|
|
|
use pyo3::prelude::*;
|
|
|
|
|
2024-08-05 19:15:30 +02:00
|
|
|
/// user cursor position in a buffer
|
|
|
|
#[derive(Clone, Debug, Default)]
|
2024-08-09 00:00:21 +02:00
|
|
|
#[cfg_attr(feature = "python", pyclass)]
|
|
|
|
// #[cfg_attr(feature = "python", pyo3(crate = "reexported::pyo3"))]
|
2024-08-05 19:15:30 +02:00
|
|
|
pub struct Cursor {
|
|
|
|
/// range of text change, as char indexes in buffer previous state
|
|
|
|
pub start: (i32, i32),
|
|
|
|
pub end: (i32, i32),
|
|
|
|
pub buffer: String,
|
|
|
|
pub user: Option<Uuid>,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl From<proto::cursor::CursorPosition> for Cursor {
|
|
|
|
fn from(value: proto::cursor::CursorPosition) -> Self {
|
|
|
|
Self {
|
|
|
|
start: (value.start.row, value.start.col),
|
|
|
|
end: (value.end.row, value.end.col),
|
|
|
|
buffer: value.buffer.path,
|
|
|
|
user: None,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl From<Cursor> for proto::cursor::CursorPosition {
|
|
|
|
fn from(value: Cursor) -> Self {
|
|
|
|
Self {
|
|
|
|
buffer: proto::files::BufferNode { path: value.buffer },
|
2024-08-05 22:44:46 +02:00
|
|
|
start: proto::cursor::RowCol {
|
|
|
|
row: value.start.0,
|
|
|
|
col: value.start.1,
|
|
|
|
},
|
|
|
|
end: proto::cursor::RowCol {
|
|
|
|
row: value.end.0,
|
|
|
|
col: value.end.1,
|
|
|
|
},
|
2024-08-05 19:15:30 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl From<proto::cursor::CursorEvent> for Cursor {
|
|
|
|
fn from(value: proto::cursor::CursorEvent) -> Self {
|
|
|
|
Self {
|
|
|
|
start: (value.position.start.row, value.position.start.col),
|
|
|
|
end: (value.position.end.row, value.position.end.col),
|
|
|
|
buffer: value.position.buffer.path,
|
|
|
|
user: Uuid::parse_str(&value.user.id).ok(),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl From<Cursor> for proto::cursor::CursorEvent {
|
|
|
|
fn from(value: Cursor) -> Self {
|
|
|
|
Self {
|
2024-08-05 22:44:46 +02:00
|
|
|
user: proto::common::Identity {
|
|
|
|
id: value.user.unwrap_or_default().to_string(),
|
|
|
|
},
|
2024-08-05 19:15:30 +02:00
|
|
|
position: proto::cursor::CursorPosition {
|
|
|
|
buffer: proto::files::BufferNode { path: value.buffer },
|
2024-08-05 22:44:46 +02:00
|
|
|
start: proto::cursor::RowCol {
|
|
|
|
row: value.start.0,
|
|
|
|
col: value.start.1,
|
|
|
|
},
|
|
|
|
end: proto::cursor::RowCol {
|
|
|
|
row: value.end.0,
|
|
|
|
col: value.end.1,
|
|
|
|
},
|
|
|
|
},
|
2024-08-05 19:15:30 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|