alma 0.1.1

A Bevy-native modal text editor with Vim-style navigation.
Documentation
//! Status-line owner systems.

use crate::ecs::{
    components::{buffer::EditorView, vim::VimModalState},
    events::status::StatusMessageRejected,
    events::status::StatusRejectionReason,
    events::status::{StatusMessage, StatusMessageRequested},
};
use bevy::prelude::{MessageReader, MessageWriter, Query, With};

/// Applies status-line requests at the status owner boundary.
pub(super) fn apply_status_message_requests(
    mut requests: MessageReader<StatusMessageRequested>,
    mut rejected: MessageWriter<StatusMessageRejected>,
    mut query: Query<&mut VimModalState, With<EditorView>>,
) {
    for request in requests.read() {
        let Ok(mut modal_state) = query.get_mut(request.target.get()) else {
            let _sent = rejected.write(StatusMessageRejected {
                target: request.target,
                rejected: request.message.clone(),
                reason: StatusRejectionReason::MissingTarget {
                    target: request.target,
                },
            });
            continue;
        };

        match &request.message {
            StatusMessage::Clear => modal_state.editor.status.clear(),
            StatusMessage::Info(message) => modal_state.editor.status.set_info(message.clone()),
            StatusMessage::Error(error) => modal_state.editor.status.set_error(*error),
        }
    }
}