use rvk::objects::Integer;
use serde_derive::Deserialize;
use serde_json::Value;
use std::collections::HashMap;
#[derive(Debug, Deserialize)]
pub struct CallbackAPIRequest {
secret: String,
group_id: i32,
#[serde(rename = "type")]
r#type: String,
#[serde(default)]
object: Object,
}
impl CallbackAPIRequest {
pub fn new(secret: &str, group_id: i32, r#type: &str, object: Object) -> Self {
Self {
secret: secret.into(),
group_id,
r#type: r#type.into(),
object,
}
}
pub fn secret(&self) -> &str {
&self.secret
}
pub fn group_id(&self) -> i32 {
self.group_id
}
pub fn r#type(&self) -> &str {
&self.r#type
}
pub fn object(&self) -> &Object {
&self.object
}
}
#[derive(Debug, Deserialize, Clone)]
pub struct Object {
from_id: Option<Integer>,
peer_id: Option<Integer>,
user_id: Option<Integer>,
text: Option<String>,
payload: Option<String>,
action: Option<Value>,
#[serde(flatten)]
extra: HashMap<String, Value>,
}
impl Default for Object {
fn default() -> Self {
Self {
from_id: None,
peer_id: None,
user_id: None,
text: None,
payload: None,
action: None,
extra: Default::default(),
}
}
}
impl Object {
pub fn new(
from_id: Option<Integer>,
peer_id: Option<Integer>,
user_id: Option<Integer>,
text: Option<String>,
payload: Option<String>,
action: Option<Value>,
extra: HashMap<String, Value>,
) -> Self {
Self {
from_id,
peer_id,
user_id,
text,
payload,
action,
extra,
}
}
pub fn get_from_id(&self) -> &Option<Integer> {
&self.from_id
}
pub fn peer_id(&self) -> &Option<Integer> {
&self.peer_id
}
pub fn user_id(&self) -> &Option<Integer> {
&self.user_id
}
pub fn text(&self) -> &Option<String> {
&self.text
}
pub fn payload(&self) -> &Option<String> {
&self.payload
}
pub fn action(&self) -> &Option<Value> {
&self.action
}
pub fn extra(&self) -> &HashMap<String, Value> {
&self.extra
}
}