(
&self,
eval_param: &EvalParams,
max_depth: u8,
)
| 189 | } |
| 190 | |
| 191 | fn do_eval( |
| 192 | &self, |
| 193 | eval_param: &EvalParams, |
| 194 | max_depth: u8, |
| 195 | ) -> Result<EvalDetail<Value>, PrerequisiteError> { |
| 196 | if !self.enabled { |
| 197 | return Ok(self.disabled_variation(eval_param, None)) |
| 198 | } |
| 199 | |
| 200 | if !self.meet_prerequisite(eval_param, max_depth)? { |
| 201 | return Ok(self.disabled_variation(eval_param, Some( |
| 202 | "Prerequisite not match".to_owned()))); |
| 203 | } |
| 204 | |
| 205 | for (i, rule) in self.rules.iter().enumerate() { |
| 206 | match rule.serve_variation(eval_param) { |
| 207 | Ok(v) => { |
| 208 | if v.is_some() { |
| 209 | return Ok(self.serve_variation( |
| 210 | v, |
| 211 | format!("rule {i}"), |
| 212 | Some(i), |
| 213 | eval_param.debug_until_time, |
| 214 | )); |
| 215 | } |
| 216 | } |
| 217 | Err(e) => { |
| 218 | return Ok(self.serve_variation( |
| 219 | None, |
| 220 | format!("{e:?}"), |
| 221 | Some(i), |
| 222 | eval_param.debug_until_time, |
| 223 | )); |
| 224 | } |
| 225 | } |
| 226 | } |
| 227 | |
| 228 | Ok(self.default_variation(eval_param, None)) |
| 229 | } |
| 230 | |
| 231 | fn meet_prerequisite( |
| 232 | &self, |
no test coverage detected