use super::InteractionDataType;
use crate::models::serde_helpers::is_default;
use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
pub struct Resolved {
#[serde(default)]
pub keyword: String,
#[serde(default)]
pub user_id: String,
#[serde(default)]
pub request: String,
#[serde(default)]
pub message_id: String,
#[serde(default)]
pub member_nick: String,
#[serde(default)]
pub button_data: String,
#[serde(default)]
pub button_id: String,
#[serde(default)]
pub feature_id: String,
#[serde(default)]
pub feedback_opt: String,
#[serde(default)]
pub checked: i32,
}
impl Resolved {
pub fn new(data: &Value) -> Self {
serde_json::from_value(data.clone()).unwrap_or_default()
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
pub struct InteractionData {
#[serde(default, skip_serializing_if = "String::is_empty")]
pub name: String,
#[serde(rename = "type", default, skip_serializing_if = "Option::is_none")]
pub data_type: Option<InteractionDataType>,
#[serde(default, skip_serializing_if = "is_default")]
pub resolved: Resolved,
}
impl InteractionData {
pub fn new(data: &Value) -> Self {
serde_json::from_value(data.clone()).unwrap_or_default()
}
}