sudachi/util/
check_params.rsuse crate::dic::grammar::Grammar;
use crate::error::{SudachiError, SudachiResult};
pub trait CheckParams {
fn check_left_id<T: Into<i64>>(&self, raw: T) -> SudachiResult<u16>;
fn check_right_id<T: Into<i64>>(&self, raw: T) -> SudachiResult<u16>;
fn check_cost<T: Into<i64>>(&self, raw: T) -> SudachiResult<i16>;
}
impl<'a> CheckParams for Grammar<'a> {
fn check_left_id<T: Into<i64>>(&self, raw: T) -> SudachiResult<u16> {
let x = raw.into();
if x < 0 {
return Err(SudachiError::InvalidDataFormat(
0,
format!("leftId was negative ({}), it must be positive", x),
));
}
let ux = x as usize;
if ux > self.conn_matrix().num_left() {
return Err(SudachiError::InvalidDataFormat(
ux,
format!("max grammar leftId is {}", self.conn_matrix().num_left()),
));
}
Ok(x as u16)
}
fn check_right_id<T: Into<i64>>(&self, raw: T) -> SudachiResult<u16> {
let x = raw.into();
if x < 0 {
return Err(SudachiError::InvalidDataFormat(
0,
format!("rightId was negative ({}), it must be positive", x),
));
}
let ux = x as usize;
if ux > self.conn_matrix().num_right() {
return Err(SudachiError::InvalidDataFormat(
ux,
format!("max grammar rightId is {}", self.conn_matrix().num_right()),
));
}
Ok(x as u16)
}
fn check_cost<T: Into<i64>>(&self, raw: T) -> SudachiResult<i16> {
let x = raw.into();
if x < (i16::MIN as i64) {
return Err(SudachiError::InvalidDataFormat(
0,
format!(
"cost ({}) was lower than the lowest acceptable value ({})",
x,
i16::MIN
),
));
}
if x > (i16::MAX as i64) {
return Err(SudachiError::InvalidDataFormat(
0,
format!(
"cost ({}) was higher than highest acceptable value ({})",
x,
i16::MAX
),
));
}
Ok(x as i16)
}
}