use crate::core::{Position, Range};
#[cfg(feature = "stream")]
use ass_core::parser::ScriptDeltaOwned;
#[cfg(not(feature = "std"))]
use alloc::string::String;
#[derive(Debug, Clone)]
pub struct CommandResult {
pub success: bool,
pub message: Option<String>,
pub modified_range: Option<Range>,
pub new_cursor: Option<Position>,
pub content_changed: bool,
#[cfg(feature = "stream")]
pub script_delta: Option<ScriptDeltaOwned>,
}
impl CommandResult {
pub fn success() -> Self {
Self {
success: true,
message: None,
modified_range: None,
new_cursor: None,
content_changed: false,
#[cfg(feature = "stream")]
script_delta: None,
}
}
pub fn success_with_change(range: Range, cursor: Position) -> Self {
Self {
success: true,
message: None,
modified_range: Some(range),
new_cursor: Some(cursor),
content_changed: true,
#[cfg(feature = "stream")]
script_delta: None,
}
}
pub fn failure(message: String) -> Self {
Self {
success: false,
message: Some(message),
modified_range: None,
new_cursor: None,
content_changed: false,
#[cfg(feature = "stream")]
script_delta: None,
}
}
#[cfg(feature = "stream")]
#[must_use]
pub fn with_delta(mut self, delta: ScriptDeltaOwned) -> Self {
self.script_delta = Some(delta);
self
}
#[must_use]
pub fn with_message(mut self, message: String) -> Self {
self.message = Some(message);
self
}
}