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