1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
use rand::seq::SliceRandom;
use std::convert::Infallible;
use super::TransformField;
use crate::action::transform::result::TransformResult as TrRes;
#[derive(Debug)]
pub struct Set(pub Option<Vec<String>>);
impl TransformField for Set {
type Err = Infallible;
fn transform_field(&self, _old_field: Option<&str>) -> Result<TrRes<String>, Self::Err> {
Ok(TrRes::New(
self.0
.as_ref()
.and_then(|v| v.choose(&mut rand::thread_rng()))
.cloned(),
))
}
}