repl_rs/
parameter.rs

1use crate::error::*;
2
3/// Command parameter
4#[derive(Debug, PartialEq)]
5pub struct Parameter {
6    pub(crate) name: String,
7    pub(crate) required: bool,
8    pub(crate) default: Option<String>,
9}
10
11impl Parameter {
12    /// Create a new command parameter with the given name
13    pub fn new(name: &str) -> Self {
14        Self {
15            name: name.into(),
16            required: false,
17            default: None,
18        }
19    }
20
21    /// Set whether the parameter is required, default is not required.
22    /// Note that you cannot have a required parameter after a non-required one
23    pub fn set_required(mut self, required: bool) -> Result<Self> {
24        if self.default.is_some() {
25            return Err(Error::IllegalRequiredError(self.name));
26        }
27        self.required = required;
28
29        Ok(self)
30    }
31
32    /// Set a default for an optional parameter.
33    /// Note that you can't have a default for a required parameter
34    pub fn set_default(mut self, default: &str) -> Result<Self> {
35        if self.required {
36            return Err(Error::IllegalDefaultError(self.name));
37        }
38        self.default = Some(default.to_string());
39
40        Ok(self)
41    }
42}