pub struct EditorSnapshot {
pub version: u32,
pub mode: SnapshotMode,
pub cursor: (u32, u32),
pub lines: Vec<String>,
pub viewport_top: u32,
pub registers: Registers,
pub marks: BTreeMap<char, (u32, u32)>,
}Expand description
Coarse editor snapshot suitable for serde round-tripping.
Today’s shape is intentionally minimal — it carries only the bits
the runtime crate::Editor knows how to round-trip without the
trait extraction (mode, cursor, lines, viewport top, settings).
Once Editor<B: Buffer, H: Host> ships under phase 5, this struct
grows to cover full SPEC state: registers, marks, jump list, change
list, undo tree, full options.
Hosts that persist editor state between sessions should:
- Treat the snapshot as opaque. Don’t manually mutate fields.
- Always check
versionafter deserialization; reject on mismatch rather than attempt migration.
§Wire-format stability
- 0.0.x:
Self::VERSIONbumps with every structural change to the snapshot. Hosts must reject mismatched persisted state — no migration path is offered. - 0.1.0:
Self::VERSIONfreezes. Hosts persisting editor state between sessions can rely on the wire format being stable for the entire 0.1.x line. - 0.2.0+: any further structural change to this struct requires a
VERSION++bump and is gated behind a major version bump of the crate.
Fields§
§version: u32Format version. See Self::VERSION for the lock policy.
Hosts use this to detect mismatched persisted state.
mode: SnapshotModeMode at snapshot time (status-line granularity).
cursor: (u32, u32)Cursor (row, col) in byte indexing.
lines: Vec<String>Buffer lines. Trailing \n not included.
viewport_top: u32Viewport top line at snapshot time.
registers: RegistersRegister bank. Vim’s "", "0–"9, "a–"z, "+/"*.
Skipped for Eq/PartialEq because crate::Registers
doesn’t derive them today.
marks: BTreeMap<char, (u32, u32)>Named marks — both lowercase ('a–'z, buffer-scope) and
uppercase ('A–'Z, file-scope). Round-trips across tab
swaps in the host.
0.0.36: consolidated from the prior file_marks field;
lowercase marks now persist as well since they live in the
same unified crate::Editor::marks map.
Implementations§
Source§impl EditorSnapshot
impl EditorSnapshot
Sourcepub const VERSION: u32 = 4
pub const VERSION: u32 = 4
Current snapshot format version.
Bumped to 2 in v0.0.8: registers added.
Bumped to 3 in v0.0.9: file_marks added.
Bumped to 4 in v0.0.36: file_marks → unified marks map
(lowercase + uppercase consolidated).
§Lock policy
- 0.0.x (today):
VERSIONbumps freely with each structural change toEditorSnapshot. Persisted state from an older patch release will not round-trip; hosts must reject the snapshot rather than attempt a field-by-field migration. - 0.1.0:
VERSIONfreezes. Hosts persisting editor state between sessions can rely on the wire format being stable for the entire 0.1.x line. - 0.2.0+: any further structural change requires
VERSION++together with a major-version bump ofhjkl-engine.
Trait Implementations§
Source§impl Clone for EditorSnapshot
impl Clone for EditorSnapshot
Source§fn clone(&self) -> EditorSnapshot
fn clone(&self) -> EditorSnapshot
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for EditorSnapshot
impl Debug for EditorSnapshot
Source§impl<'de> Deserialize<'de> for EditorSnapshot
impl<'de> Deserialize<'de> for EditorSnapshot
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Auto Trait Implementations§
impl Freeze for EditorSnapshot
impl RefUnwindSafe for EditorSnapshot
impl Send for EditorSnapshot
impl Sync for EditorSnapshot
impl Unpin for EditorSnapshot
impl UnsafeUnpin for EditorSnapshot
impl UnwindSafe for EditorSnapshot
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more