use crate::validators::required;
use serde::Serialize;
use serde_json::Value;
use slack_messaging_derive::Builder;
#[derive(Debug, Clone, Serialize, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum Conversation {
Im,
Mpim,
Private,
Public,
}
#[derive(Debug, Clone, Serialize, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum TriggerAction {
OnEnterPressed,
OnCharacterEntered,
}
#[derive(Debug, Clone, PartialEq)]
pub struct UrlUnavailable;
#[derive(Debug, Clone, PartialEq)]
pub struct UrlAvailable;
#[derive(Debug, Clone, Serialize, PartialEq, Builder)]
pub struct InputParameter {
#[builder(validate("required"))]
pub(crate) name: Option<String>,
#[builder(validate("required"))]
pub(crate) value: Option<Value>,
}
#[cfg(test)]
mod tests {
use super::*;
use crate::errors::*;
#[test]
fn it_implements_builder() {
let expected = InputParameter {
name: Some("input_parameter_a".into()),
value: Some(Value::String("Value for input param A".into())),
};
let val = InputParameter::builder()
.set_name(Some("input_parameter_a"))
.set_value(Some(Value::String("Value for input param A".into())))
.build()
.unwrap();
assert_eq!(val, expected);
let val = InputParameter::builder()
.name("input_parameter_a")
.value("Value for input param A")
.build()
.unwrap();
assert_eq!(val, expected);
}
#[test]
fn it_requires_name_field() {
let err = InputParameter::builder()
.value("Value for input param A")
.build()
.unwrap_err();
assert_eq!(err.object(), "InputParameter");
let errors = err.field("name");
assert!(errors.includes(ValidationErrorKind::Required));
}
#[test]
fn it_requires_value_field() {
let err = InputParameter::builder()
.name("input_parameter_a")
.build()
.unwrap_err();
assert_eq!(err.object(), "InputParameter");
let errors = err.field("value");
assert!(errors.includes(ValidationErrorKind::Required));
}
}