use serde::{Deserialize, Serialize};
use crate::card::components::content_components::plain_text::PlainText;
#[derive(Debug, Serialize, Deserialize)]
pub struct FeishuCardImage {
tag: String,
img_key: String,
#[serde(skip_serializing_if = "Option::is_none")]
alt: Option<PlainText>,
#[serde(skip_serializing_if = "Option::is_none")]
title: Option<PlainText>,
#[serde(skip_serializing_if = "Option::is_none")]
corner_radius: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
scale_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
size: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
transparent: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
preview: Option<bool>,
}
impl Default for FeishuCardImage {
fn default() -> Self {
FeishuCardImage {
tag: "img".to_string(),
img_key: "".to_string(),
alt: None,
title: None,
corner_radius: None,
scale_type: None,
size: None,
transparent: None,
preview: None,
}
}
}
impl FeishuCardImage {
pub fn new() -> Self {
FeishuCardImage::default()
}
pub fn img_key(mut self, img_key: &str) -> Self {
self.img_key = img_key.to_string();
self
}
pub fn alt(mut self, alt: PlainText) -> Self {
self.alt = Some(alt);
self
}
pub fn title(mut self, title: PlainText) -> Self {
self.title = Some(title);
self
}
pub fn corner_radius(mut self, corner_radius: &str) -> Self {
self.corner_radius = Some(corner_radius.to_string());
self
}
pub fn scale_type(mut self, scale_type: &str) -> Self {
self.scale_type = Some(scale_type.to_string());
self
}
pub fn size(mut self, size: &str) -> Self {
self.size = Some(size.to_string());
self
}
pub fn transparent(mut self, transparent: bool) -> Self {
self.transparent = Some(transparent);
self
}
pub fn preview(mut self, preview: bool) -> Self {
self.preview = Some(preview);
self
}
pub fn build(self) -> FeishuCardImage {
self
}
}
#[cfg(test)]
mod test {
use serde_json::json;
use super::*;
#[test]
fn test_image() {
let image = FeishuCardImage::new()
.img_key("img_v2_ace8a4f2-ae13-420f-9eb3-b3530b4abcef")
.scale_type("crop_top")
.size("stretch")
.preview(true);
assert_eq!(
serde_json::to_value(image).unwrap(),
json!( {
"tag": "img",
"img_key": "img_v2_ace8a4f2-ae13-420f-9eb3-b3530b4abcef",
"preview": true,
"scale_type": "crop_top",
"size": "stretch"
})
);
}
}