use crate::code_type::CodeType;
use crate::error::MecoError;
use crate::letter::delehi::{DelehiFrom, DelehiTo};
use crate::letter::menk::{MenkLetterFrom, MenkLetterTo};
use crate::letter::rule::{LetterTranslateRuleFrom, LetterTranslateRuleTo};
use crate::shape::menk_from::MenkShapeFrom;
use crate::shape::menk_to::MenkShapeTo;
use crate::shape::rule::ShapeTranslateRule;
use crate::shape::z52_from::Z52From;
use crate::shape::z52_to::Z52To;
static Z52_FROM: Z52From = Z52From;
static Z52_TO: Z52To = Z52To;
static MENK_SHAPE_FROM: MenkShapeFrom = MenkShapeFrom;
static MENK_SHAPE_TO: MenkShapeTo = MenkShapeTo;
static DELEHI_FROM: DelehiFrom = DelehiFrom;
static DELEHI_TO: DelehiTo = DelehiTo;
static MENK_LETTER_FROM: MenkLetterFrom = MenkLetterFrom;
static MENK_LETTER_TO: MenkLetterTo = MenkLetterTo;
pub(crate) fn shape_from_rule(ct: CodeType) -> Result<&'static dyn ShapeTranslateRule, MecoError> {
match ct {
CodeType::Z52 => Ok(&Z52_FROM),
CodeType::MenkShape => Ok(&MENK_SHAPE_FROM),
_ => Err(MecoError::MissTranslateRule(ct)),
}
}
pub(crate) fn shape_to_rule(ct: CodeType) -> Result<&'static dyn ShapeTranslateRule, MecoError> {
match ct {
CodeType::Z52 => Ok(&Z52_TO),
CodeType::MenkShape => Ok(&MENK_SHAPE_TO),
_ => Err(MecoError::MissTranslateRule(ct)),
}
}
pub(crate) fn letter_from_rule(
ct: CodeType,
) -> Result<&'static dyn LetterTranslateRuleFrom, MecoError> {
match ct {
CodeType::Delehi => Ok(&DELEHI_FROM),
CodeType::MenkLetter => Ok(&MENK_LETTER_FROM),
_ => Err(MecoError::MissTranslateRule(ct)),
}
}
pub(crate) fn letter_to_rule(ct: CodeType) -> Result<&'static dyn LetterTranslateRuleTo, MecoError> {
match ct {
CodeType::Delehi => Ok(&DELEHI_TO),
CodeType::MenkLetter => Ok(&MENK_LETTER_TO),
_ => Err(MecoError::MissTranslateRule(ct)),
}
}