From bd5d3f7e5f025d283614934077b742c80299f29f Mon Sep 17 00:00:00 2001 From: Dan Ballard Date: Thu, 7 Jul 2022 14:30:20 -0700 Subject: [PATCH] starting to type fields --- src/event.rs | 103 +++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 80 insertions(+), 23 deletions(-) diff --git a/src/event.rs b/src/event.rs index d1602bd..dd7e3df 100644 --- a/src/event.rs +++ b/src/event.rs @@ -7,13 +7,19 @@ use chrono::offset::LocalResult; use crate::structs::{ACL, ConnectionState, CwtchEvent}; +pub type Identity = String; +pub type Handle = String; +pub type ConversationID = i32; +pub type FileKey = String; + #[derive(Debug)] +/// Enum for type of notification a UI/client should emit for a new message pub enum MessageNotification { - // NotificationNone enum for message["notification"] that means no notification + /// means no notification None, - // NotificationEvent enum for message["notification"] that means emit a notification that a message event happened only + /// means emit a notification that a message event happened only SimpleEvent, - // NotificationConversation enum for message["notification"] that means emit a notification event with Conversation handle included + /// means emit a notification event with Conversation handle included ContactInfo, } @@ -29,8 +35,11 @@ impl From for MessageNotification { } #[derive(Debug)] +/// Enum for results from NetworkCheck plugin on profiles pub enum NetworkCheckStatus { + /// There was an error, this profile cannot connect to itself Error, + /// Success connecting to self, profile is "online" Success } @@ -45,9 +54,13 @@ impl From for NetworkCheckStatus { } #[derive(Debug)] +/// Enum denoting server storage mode pub enum ServerStorageType { + /// indicates some app supplied default password is being used on this server for storage encryption DefaultPassword, + /// indicates a user supplied password is being used on this server for storage encryption Password, + /// indicates no password and no encryption is being used on server storage NoPassword } @@ -63,8 +76,11 @@ impl From for ServerStorageType { } #[derive(Debug)] +/// Enum used by servers to declare their intent to be running or stopped pub enum ServerIntent { + /// a server intends to be running Running, + /// a server intends to be stopped Stopped } @@ -79,13 +95,16 @@ impl From for ServerIntent { } #[derive(Debug)] +/// Enum for events from Cwtch appbus pub enum Event { // App events + /// Emited by libcwtch once Cwtch.Start() has been completed successfully, you can start making API calls, lcg is initialized CwtchStarted, + /// A new peer has been loaded, details of peer. Identity should be stored so further API calls can be made NewPeer { - identity: String, + identity: Identity, tag: String, created: bool, name: String, @@ -95,60 +114,72 @@ pub enum Event { contacts_json: String, server_json: String, //ServerList }, + /// Cwtch had an error at the app level (not profile level), usually in response to an API call AppError { error: String }, + /// Global settings being emited from lcg, usually in response to them being sent to be saved by client UpdateGlobalSettings { settings: HashMap, }, - ErrUnhandled { - name: String, - data: HashMap, - }, + /// A profile has an error, usually emited in response to an API call PeerError { error: String }, + /// A profile was successfully deleted, it is no longer usable PeerDeleted { identity: String }, + /// Cwtch is shutting down, stop making API calls Shutdown, + /// indicates status of the ACN (tor), usually during boot. ACNStatus { + /// the percent of ACN boot (-1 to 100) progress: i8, + /// an associated status message from the ACN status: String }, + /// Version of the ACN (currently tor) ACNVersion { verstion: String, }, + /// Notice from libCwtch that before completing load of a profile a storage migration is occuring so Start will take longer StartingStorageMiragtion, + /// Notice from libCwtch that the storage migration is complete, profile being loaded resuming DoneStorageMigration, // app server events + /// A new server has been loaded NewServer { - onion: String, + onion: Identity, server_bundle: String, description: String, storage_type: ServerStorageType, autostart: bool, running: bool, }, + /// Response to request for server intent change, indicating the server is indending the new state ServerIntentUpdate { - identity: String, + identity: Identity, intent: ServerIntent }, + /// Notice a server was deleted (in response to an API call) and is no longer usable ServerDeleted { - identity: String, + identity: Identity, success: bool, error: Option, }, + /// Stats info for a server, periodically emited ServerStatsUpdate { - identity: String, + identity: Identity, total_messages: i32, connections: i32, }, // profile events + /// A new message was received NewMessageFromPeer { conversation_id: i32, handle: String, @@ -158,9 +189,10 @@ pub enum Event { notification: MessageNotification, picture: String, }, + /// A new contact has been created (imported, added, or contacted by) ContactCreated { conversation_id: i32, - remote_peer: String, + remote_peer: Identity, nick: String, status: ConnectionState, unread: i32, @@ -174,43 +206,51 @@ pub enum Event { last_msg_time: DateTime, }, + /// A peer has changed state PeerStateChange { - remote_peer: String, + remote_peer: Identity, connection_state: ConnectionState, }, + /// Notice from the network check plugin, a profile self check test by attempting to connecting to itself NetworkStatus { - address: String, + address: Identity, error: String, status: NetworkCheckStatus, }, + /// Information from the ACN about a peer ACNInfo { - handle: String, + handle: Identity, key: String, data: String, }, + /// a profile attribute has been updated with a new value UpdatedProfileAttribute { key: String, value: String, }, + /// emited to confirm ack of a message succeeded IndexedAcknowledgement { conversation_id: i32, index: i32, }, + /// emited to signal failure to ack a message IndexedFailure { conversation_id: i32, index: i32, - handle: String, + handle: Identity, error: String }, + /// a peer has acked a message PeerAcknowledgement { event_id: String, - remote_peer: String, + remote_peer: Identity, conversation_id: i32, }, + /// New message received on a group NewMessageFromGroup { conversation_id: i32, timestamp_sent: DateTime, - remote_peer: String, + remote_peer: Identity, index: i32, message: String, content_hash: String, @@ -218,6 +258,7 @@ pub enum Event { nick: String, notification: MessageNotification, }, + /// notice a group has been created GroupCreated { conversation_id: i32, group_id: String, @@ -226,6 +267,7 @@ pub enum Event { picture: String, access_control_list: ACL, }, + /// notice a new group exists NewGroup { conversation_id: i32, group_id: String, @@ -235,43 +277,51 @@ pub enum Event { picture: String, access_control_list: ACL, }, + /// a server connection state has changed ServerStateChange { group_server: String, state: ConnectionState }, + /// A getval call to a peer has returned a response NewRetValMessageFromPeer { - remote_peer: String, + remote_peer: Identity, scope: String, path: String, exists: bool, data: String, file_path: Option }, + /// result of a call to share a file, the filekey and manifest to operate on it ShareManifest { filekey: String, serializedManifest: String, }, + /// Information on a peer fileshare has been received ManifestSizeReceived { filekey: String, manifest_size: i32, handle: String, }, + /// An error has occured while trying to parse a peer sharefile ManifestError { - handle: String, + handle: Identity, filekey: String, }, + /// A peer message about a shared file has been received ManifestReceived { - handle: String, + handle: Identity, filekey: String, serialized_manifest: String, }, + /// a received manfiest has been saved ManifestSaved { - handle: String, + handle: Identity, filekey: String, serialized_manifest: String, temp_file: String, name_suggestion: String, }, + /// periodically emited status updates about an active download of a shared file FileDownloadProgressUpdate { filekey: String, progress: i32, @@ -279,6 +329,13 @@ pub enum Event { name_suggestion: String, }, // FileDownloaded, ?? + + /// Indicates an event was sent from libCwtch that we don't handle/didn't anticipate + /// still passing it on giving the user a chance to react, but should be reported so we can handle it properly + ErrUnhandled { + name: String, + data: HashMap, + }, } impl From<&CwtchEvent> for Event {