capability_grower_configuration/
ai_tree_branching_confidence_configuration.rs1crate::ix!();
3
4#[derive(
10 Copy,
11 SaveLoad,
12 Debug,
13 Clone,
14 PartialEq,
15 Getters,
16 Builder,
17 Default,
18 Serialize,
19 Deserialize,
20 AiJsonTemplate,
21 AiJsonTemplateWithJustification,
22)]
23#[builder(pattern="owned", setter(into))]
24#[getset(get="pub")]
25pub struct AiTreeBranchingConfidenceConfiguration {
26
27 #[serde(deserialize_with = "fuzzy_u8")]
30 base_factor: u8,
31
32 factor_multiplier: f32,
37}
38
39impl AiTreeBranchingConfidenceConfiguration {
40 pub fn validate(&self) -> Result<(), GrowerTreeConfigurationError> {
41 if self.factor_multiplier < 0.0 {
42 return Err(GrowerTreeConfigurationError::AIConfidenceFactorNegative);
43 }
44 Ok(())
45 }
46}
47
48impl FuzzyFromJsonValue for JustifiedAiTreeBranchingConfidenceConfiguration {
49 fn fuzzy_from_json_value(value: &JsonValue)
50 -> Result<Self, FuzzyFromJsonValueError>
51 {
52 trace!("(JustifiedAiTreeBranchingConfidenceConfiguration) Entering fuzzy_from_json_value");
53
54 if value.is_null() {
56 debug!("(JustifiedAiTreeBranchingConfidenceConfiguration) Null => returning base_factor=0, factor_multiplier=0");
57 return Ok(Self {
58 base_factor: 0,
59 base_factor_confidence: 0.0,
60 base_factor_justification: String::new(),
61 factor_multiplier: 0.0,
62 factor_multiplier_confidence: 0.0,
63 factor_multiplier_justification: String::new(),
64 });
65 }
66
67 let mut obj = match value.as_object() {
69 Some(m) => {
70 trace!("(JustifiedAiTreeBranchingConfidenceConfiguration) Found object => flattening if needed.");
71 m.clone()
72 }
73 None => {
74 error!("(JustifiedAiTreeBranchingConfidenceConfiguration) Not an object => fail!");
75 return Err(FuzzyFromJsonValueError::NotAnObject {
76 target_type: "JustifiedAiTreeBranchingConfidenceConfiguration",
77 actual: value.clone(),
78 });
79 }
80 };
81
82 flatten_all_fields(&mut obj);
83
84 let base_factor_val = match obj.get("base_factor") {
86 Some(x) => {
87 match fuzzy_u8(x) {
88 Ok(u) => {
89 trace!("(JustifiedAiTreeBranchingConfidenceConfiguration) base_factor => {}", u);
90 u
91 }
92 Err(e) => {
93 error!("(JustifiedAiTreeBranchingConfidenceConfiguration) base_factor parse error => {:?}", e);
94 return Err(FuzzyFromJsonValueError::Other {
95 target_type: "JustifiedAiTreeBranchingConfidenceConfiguration",
96 detail: format!("Cannot parse base_factor as u8: {:?}", e),
97 });
98 }
99 }
100 }
101 None => {
102 error!("(JustifiedAiTreeBranchingConfidenceConfiguration) Missing 'base_factor' => cannot parse!");
103 return Err(FuzzyFromJsonValueError::MissingField {
104 field_name: "base_factor",
105 target_type: "JustifiedAiTreeBranchingConfidenceConfiguration",
106 });
107 }
108 };
109 let base_conf = get_f64_field(&obj, "base_factor_confidence", "JustifiedAiTreeBranchingConfidenceConfiguration")
110 .unwrap_or(0.0);
111 let base_just = get_string_field(&obj, "base_factor_justification", "JustifiedAiTreeBranchingConfidenceConfiguration")
112 .unwrap_or_default();
113
114 let fm_f64 = get_f64_field(&obj, "factor_multiplier", "JustifiedAiTreeBranchingConfidenceConfiguration")
116 .unwrap_or(0.0);
117 let factor_multi = fm_f64 as f32;
118 let fm_conf = get_f64_field(&obj, "factor_multiplier_confidence", "JustifiedAiTreeBranchingConfidenceConfiguration")
119 .unwrap_or(0.0);
120 let fm_just = get_string_field(&obj, "factor_multiplier_justification", "JustifiedAiTreeBranchingConfidenceConfiguration")
121 .unwrap_or_default();
122
123 trace!("(JustifiedAiTreeBranchingConfidenceConfiguration) Successfully parsed => returning final struct.");
124 Ok(Self {
125 base_factor: base_factor_val,
126 base_factor_confidence: base_conf,
127 base_factor_justification: base_just,
128 factor_multiplier: factor_multi,
129 factor_multiplier_confidence: fm_conf,
130 factor_multiplier_justification: fm_just,
131 })
132 }
133}