use crate::config_chirho::ModuleConfigChirho;
use crate::error_chirho::ResultChirho;
use crate::keys_chirho::SwKeyChirho;
use crate::{DirectionChirho, EncodingChirho, MarkupChirho};
pub trait SwModuleChirho {
fn name_chirho(&self) -> &str;
fn description_chirho(&self) -> &str;
fn module_type_chirho(&self) -> &str;
fn language_chirho(&self) -> &str;
fn direction_chirho(&self) -> DirectionChirho;
fn encoding_chirho(&self) -> EncodingChirho;
fn markup_chirho(&self) -> MarkupChirho;
fn get_key_chirho(&self) -> &dyn SwKeyChirho;
fn set_key_chirho(&mut self, key_chirho: &dyn SwKeyChirho) -> ResultChirho<()>;
fn get_raw_entry_chirho(&mut self) -> ResultChirho<String>;
fn render_text_chirho(&mut self) -> ResultChirho<String> {
self.get_raw_entry_chirho()
}
fn strip_text_chirho(&mut self) -> ResultChirho<String> {
self.get_raw_entry_chirho()
}
fn is_writable_chirho(&self) -> bool {
false
}
fn is_encrypted_chirho(&self) -> bool;
fn set_cipher_key_chirho(&mut self, _key_chirho: &str) -> ResultChirho<()> {
Ok(())
}
fn has_entry_chirho(&self) -> bool {
true
}
fn get_config_entry_chirho(&self, key_chirho: &str) -> Option<&str>;
fn increment_chirho(&mut self, steps_chirho: i32);
fn decrement_chirho(&mut self, steps_chirho: i32);
fn pop_error_chirho(&mut self) -> bool;
}
pub struct ModuleBaseChirho {
config_chirho: ModuleConfigChirho,
#[allow(dead_code)]
key_text_chirho: String,
error_chirho: bool,
}
impl ModuleBaseChirho {
pub fn new_chirho(config_chirho: ModuleConfigChirho) -> Self {
Self {
config_chirho,
key_text_chirho: String::new(),
error_chirho: false,
}
}
pub fn config_chirho(&self) -> &ModuleConfigChirho {
&self.config_chirho
}
pub fn name_chirho(&self) -> &str {
&self.config_chirho.name_chirho
}
pub fn description_chirho(&self) -> &str {
self.config_chirho.description_chirho().unwrap_or("")
}
pub fn language_chirho(&self) -> &str {
self.config_chirho.language_chirho().unwrap_or("en")
}
pub fn direction_chirho(&self) -> DirectionChirho {
match self.config_chirho.direction_chirho() {
"RtoL" => DirectionChirho::RightToLeftChirho,
"BiDi" => DirectionChirho::BidirectionalChirho,
_ => DirectionChirho::LeftToRightChirho,
}
}
pub fn encoding_chirho(&self) -> EncodingChirho {
match self.config_chirho.encoding_chirho() {
"Latin-1" | "ISO-8859-1" => EncodingChirho::Latin1Chirho,
"UTF-16" => EncodingChirho::Utf16Chirho,
"SCSU" => EncodingChirho::ScsuChirho,
_ => EncodingChirho::Utf8Chirho,
}
}
pub fn markup_chirho(&self) -> MarkupChirho {
match self.config_chirho.source_type_chirho() {
Some("OSIS") => MarkupChirho::OsisChirho,
Some("ThML") => MarkupChirho::ThmlChirho,
Some("GBF") => MarkupChirho::GbfChirho,
Some("TEI") => MarkupChirho::TeiChirho,
Some("HTML") => MarkupChirho::HtmlChirho,
Some("Plain") => MarkupChirho::PlainChirho,
_ => MarkupChirho::UnknownChirho,
}
}
pub fn is_encrypted_chirho(&self) -> bool {
self.config_chirho.is_encrypted_chirho()
}
pub fn get_config_entry_chirho(&self, key_chirho: &str) -> Option<&str> {
self.config_chirho.get_chirho(key_chirho)
}
pub fn set_error_chirho(&mut self, error_chirho: bool) {
self.error_chirho = error_chirho;
}
pub fn pop_error_chirho(&mut self) -> bool {
let e_chirho = self.error_chirho;
self.error_chirho = false;
e_chirho
}
}