imp/src/event.rs

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(),
},
}
}
}