73 lines
2.1 KiB
Rust
73 lines
2.1 KiB
Rust
use chrono::{DateTime, FixedOffset};
|
|
use libcwtch::structs::CwtchEvent;
|
|
use std::collections::HashMap;
|
|
|
|
#[derive(Debug)]
|
|
pub enum Event {
|
|
CwtchStarted {
|
|
data: HashMap<String, String>,
|
|
},
|
|
NewPeer {
|
|
data: HashMap<String, String>,
|
|
},
|
|
|
|
NewMessageFromPeer {
|
|
conversation_id: i32,
|
|
handle: String,
|
|
timestamp_received: DateTime<FixedOffset>,
|
|
message: String,
|
|
},
|
|
AppError {
|
|
data: HashMap<String, String>,
|
|
},
|
|
ContactCreated {
|
|
data: HashMap<String, String>,
|
|
},
|
|
PeerStateChange {
|
|
data: HashMap<String, String>,
|
|
},
|
|
UpdateGlobalSettings {
|
|
data: HashMap<String, String>,
|
|
},
|
|
|
|
ErrUnhandled {
|
|
name: String,
|
|
data: HashMap<String, String>,
|
|
},
|
|
}
|
|
|
|
impl From<&CwtchEvent> for Event {
|
|
fn from(cwtch_event: &CwtchEvent) -> Self {
|
|
match cwtch_event.event_type.as_str() {
|
|
"CwtchStarted" => Event::CwtchStarted {
|
|
data: cwtch_event.data.clone(),
|
|
},
|
|
"NewPeer" => Event::NewPeer {
|
|
data: cwtch_event.data.clone(),
|
|
},
|
|
"NewMessageFromPeer" => Event::NewMessageFromPeer {
|
|
conversation_id: cwtch_event.data["ConversationID"].parse().unwrap_or(-2),
|
|
handle: cwtch_event.data["RemotePeer"].clone(),
|
|
timestamp_received: DateTime::parse_from_rfc3339(cwtch_event.data["TimestampReceived"].as_str()).unwrap(),
|
|
message: cwtch_event.data["Data"].clone(),
|
|
},
|
|
"AppError" => Event::AppError {
|
|
data: cwtch_event.data.clone(),
|
|
},
|
|
"ContactCreated" => Event::ContactCreated {
|
|
data: cwtch_event.data.clone(),
|
|
},
|
|
"PeerStateChange" => Event::PeerStateChange {
|
|
data: cwtch_event.data.clone(),
|
|
},
|
|
"UpdateGlobalSettings" => Event::UpdateGlobalSettings {
|
|
data: cwtch_event.data.clone(),
|
|
},
|
|
x => Event::ErrUnhandled {
|
|
name: x.to_string(),
|
|
data: cwtch_event.data.clone(),
|
|
},
|
|
}
|
|
}
|
|
}
|