use inset_foundation::App;
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
pub struct ProcessTextAction {
pub id: String,
pub label: String,
}
impl ProcessTextAction {
pub fn new(id: impl Into<String>, label: impl Into<String>) -> ProcessTextAction {
ProcessTextAction {
id: id.into(),
label: label.into(),
}
}
}
pub trait ProcessTextService {
fn query_text_actions(&self, app: &App) -> Vec<ProcessTextAction>;
fn process_text_action(
&self,
app: &App,
id: &str,
text: &str,
read_only: bool,
) -> Option<String>;
}
#[derive(Clone, Debug, Default)]
pub struct DefaultProcessTextService;
impl DefaultProcessTextService {
pub fn new() -> DefaultProcessTextService {
DefaultProcessTextService
}
}
impl ProcessTextService for DefaultProcessTextService {
fn query_text_actions(&self, app: &App) -> Vec<ProcessTextAction> {
let _ = app;
Vec::new()
}
fn process_text_action(
&self,
app: &App,
id: &str,
text: &str,
read_only: bool,
) -> Option<String> {
let _ = (app, id, text, read_only);
None
}
}
#[cfg(test)]
mod tests {
use inset_foundation::AppCell;
use super::*;
#[test]
fn action_equality() {
let action = ProcessTextAction::new("id", "Translate");
assert_eq!(action, ProcessTextAction::new("id", "Translate"));
assert_ne!(action, ProcessTextAction::new("id", "Share"));
}
#[test]
fn default_service_is_empty() {
let cell = AppCell::new();
let app = cell.borrow_mut();
let service = DefaultProcessTextService::new();
assert!(service.query_text_actions(&app).is_empty());
assert!(
service
.process_text_action(&app, "id", "hello", false)
.is_none()
);
}
}