alma 0.1.1

A Bevy-native modal text editor with Vim-style navigation.
Documentation
//! Interpreted viewport intent messages.

use crate::ecs::components::buffer::ViewEntity;
use crate::vim::ViewportPosition;
use bevy::prelude::Message;

pub use super::error::ViewportRejectionReason;

/// Viewport intent decoupled from direct viewport mutation.
#[derive(Clone, Copy, Debug, Eq, Message, PartialEq)]
pub struct ViewportIntent {
    /// View entity whose viewport should change.
    pub target: ViewEntity,
    /// Requested cursor-relative viewport placement.
    pub placement: ViewportPosition,
}

/// Notification that a viewport intent could not be applied by the layout owner.
#[derive(Clone, Copy, Debug, Eq, Message, PartialEq)]
pub struct ViewportIntentRejected {
    /// View entity whose viewport was requested.
    pub target: ViewEntity,
    /// Requested cursor-relative viewport placement.
    pub placement: ViewportPosition,
    /// Boundary reason that prevented layout mutation.
    pub reason: ViewportRejectionReason,
}