Skip to main content

beetry_node/plugin/
params.rs

1use std::sync::Arc;
2
3use anyhow::{Error, anyhow};
4use beetry_editor_types::spec::node::{
5    FieldDefinition, FieldMetadata, FieldName, FieldTypeSpec, ParamsSpec,
6};
7use beetry_plugin::ProvideParamSpec;
8use mitsein::iter1::IntoIterator1;
9
10use crate::ParallelParams;
11
12impl ProvideParamSpec for ParallelParams {
13    fn provide() -> ParamsSpec {
14        [
15            (
16                FieldName::from("success_count"),
17                FieldDefinition {
18                    type_spec: FieldTypeSpec::U16(FieldMetadata::new(Arc::new(
19                        Self::validate_success_count,
20                    ))),
21                    description: Some("Number of successful children required to succeed".into()),
22                },
23            ),
24            (
25                FieldName::from("failure_count"),
26                FieldDefinition {
27                    type_spec: FieldTypeSpec::U16(FieldMetadata::new(Arc::new(
28                        Self::validate_failure_count,
29                    ))),
30                    description: Some("Number of failed children required to fail".into()),
31                },
32            ),
33        ]
34        .into_iter1()
35        .collect1()
36    }
37}
38
39impl ParallelParams {
40    #[allow(clippy::trivially_copy_pass_by_ref)]
41    fn validate_success_count(value: &u16) -> Result<(), Error> {
42        if *value == 0 {
43            return Err(anyhow!("success count must be greater than 0"));
44        }
45        Ok(())
46    }
47
48    #[allow(clippy::trivially_copy_pass_by_ref)]
49    fn validate_failure_count(value: &u16) -> Result<(), Error> {
50        if *value == 0 {
51            return Err(anyhow!("failure count must be greater than 0"));
52        }
53        Ok(())
54    }
55}