use serde::Serialize;
#[derive(Clone, Debug, Serialize)]
pub struct ForceReply {
force_reply: bool,
#[serde(skip_serializing_if = "Option::is_none")]
input_field_placeholder: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
selective: Option<bool>,
}
impl ForceReply {
pub fn new(force_reply: bool) -> Self {
ForceReply {
force_reply,
input_field_placeholder: None,
selective: None,
}
}
pub fn input_field_placeholder<T>(mut self, value: T) -> Self
where
T: Into<String>,
{
self.input_field_placeholder = Some(value.into());
self
}
pub fn selective(mut self, selective: bool) -> Self {
self.selective = Some(selective);
self
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::types::ReplyMarkup;
#[test]
fn serialize() {
let markup: ReplyMarkup = ForceReply::new(true).into();
let data = serde_json::to_value(&markup).unwrap();
assert_eq!(data, serde_json::json!({"force_reply":true}));
let markup: ReplyMarkup = ForceReply::new(true)
.selective(true)
.input_field_placeholder("placeholder")
.into();
let data = serde_json::to_value(&markup).unwrap();
assert_eq!(
data,
serde_json::json!({
"force_reply": true,
"selective": true,
"input_field_placeholder": "placeholder"
})
);
let markup: ReplyMarkup = ForceReply::new(true).selective(false).into();
let data = serde_json::to_value(&markup).unwrap();
assert_eq!(data, serde_json::json!({"force_reply":true,"selective":false}));
}
}