use super::TransformField;
use crate::action::transform::result::TransformResult;
use std::{convert::Infallible, iter::repeat};
#[derive(Debug)]
pub struct Shorten {
pub len: usize,
}
impl TransformField for Shorten {
type Err = Infallible;
fn transform_field(&self, field: Option<&str>) -> Result<TransformResult<String>, Self::Err> {
let new_val = if self.len == 0 {
None
} else if let Some(field) = field {
if field.chars().count() < self.len {
Some(field.to_owned())
} else {
Some(
field
.chars()
.take(self.len)
.chain(repeat('.').take(3))
.collect::<String>(),
)
}
} else {
None
};
Ok(TransformResult::New(new_val))
}
}