use serde::{Deserialize, Serialize};
use crate::model::Entity;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename = "camelCase")]
pub struct ThreadComment {
pub text: String,
pub mentions: Vec<Entity>,
pub files: Vec<ThreadCommentFile>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename = "camelCase")]
pub struct ThreadCommentFile {
pub file_key: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub width: Option<u64>,
}
pub fn thread_comment(text: impl Into<String>) -> ThreadCommentBuilder {
ThreadCommentBuilder {
text: text.into(),
mentions: Vec::new(),
files: Vec::new(),
}
}
#[derive(Debug, Clone)]
pub struct ThreadCommentBuilder {
text: String,
mentions: Vec<Entity>,
files: Vec<ThreadCommentFile>,
}
impl ThreadCommentBuilder {
pub fn mention(mut self, entity: Entity) -> Self {
self.mentions.push(entity);
self
}
pub fn mentions(mut self, entities: impl IntoIterator<Item = Entity>) -> Self {
self.mentions.extend(entities);
self
}
pub fn file(mut self, file: ThreadCommentFile) -> Self {
self.files.push(file);
self
}
pub fn files(mut self, files: impl IntoIterator<Item = ThreadCommentFile>) -> Self {
self.files.extend(files);
self
}
pub fn build(self) -> ThreadComment {
ThreadComment {
text: self.text,
mentions: self.mentions,
files: self.files,
}
}
}
impl From<ThreadCommentBuilder> for ThreadComment {
fn from(builder: ThreadCommentBuilder) -> Self {
builder.build()
}
}