use serde_derive::{Serialize, Deserialize};
use crate::models::reply::Reply;
use crate::models::user::User;
use crate::models::status::Status;
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct Comment {
pub message: String,
#[serde(default = "default_anonym")]
pub anonymous: bool,
#[serde(default = "String::new")]
pub unique_id: String,
#[serde(default = "String::new")]
pub user_id: String,
#[serde(default = "default_status")]
pub status: Status,
#[serde(default = "String::new")]
pub created_on: String,
#[serde(default = "default_user")]
pub user: User,
#[serde(default = "default_session_user")]
pub session_user: User,
#[serde(default ="Vec::new")]
pub replies: Vec<Reply>,
#[serde(default = "default_enable")]
pub enabled: bool,
#[serde(default = "default_visibility")]
pub visible: bool,
#[serde(default = "default_editability")]
pub editable: bool,
#[serde(default = "default_trashability")]
pub trashable: bool,
#[serde(default = "String::new")]
pub more_message: String,
#[serde(default = "default_has_more_message")]
pub has_more_message: bool,
#[serde(default = "default_replies_count")]
pub replies_count: usize,
#[serde(default = "default_has_replies")]
pub has_replies: bool,
#[serde(default = "default_upvotes_count")]
pub upvotes_count: usize,
#[serde(default = "default_downvotes_count")]
pub downvotes_count: usize,
#[serde(default = "String::new")]
pub time_ago: String,
#[serde(default = "default_show_dropdown")]
pub show_dropdown: bool,
}
fn default_anonym() -> bool {
false
}
fn default_user() -> User {
User::default()
}
fn default_session_user() -> User {
User::default()
}
fn default_status() -> Status {
Status::Pending
}
fn default_enable() -> bool {
true
}
fn default_visibility() -> bool {
false
}
fn default_editability() -> bool {
false
}
fn default_trashability() -> bool {
false
}
fn default_has_more_message() -> bool {
false
}
fn default_replies_count() -> usize {
0usize
}
fn default_has_replies() -> bool {
false
}
fn default_upvotes_count() -> usize {
0usize
}
fn default_downvotes_count() -> usize {
0usize
}
fn default_show_dropdown() -> bool {
false
}
impl Comment {
pub fn from(message: &str, is_anonymous: bool, user_id: &str) -> Comment {
Comment {
message: message.to_string(),
anonymous: is_anonymous,
unique_id: String::new(),
user_id: user_id.to_string(),
status: Status::Pending,
created_on: String::new(),
user: User::default(), session_user: User::default(), replies: Vec::new(),
enabled: true, visible: false, editable: false, trashable: false, more_message: String::new(), has_more_message: false, replies_count: 0, has_replies: false,
upvotes_count: 0, downvotes_count: 0, time_ago: String::new(), show_dropdown: false,
}
}
}