@@ -24,6 +24,17 @@ pub struct RemoteEvent {
2424 fields : Value ,
2525}
2626
27+ impl RemoteEvent {
28+ pub fn from_str ( json_as_str : & str ) -> Result < Self , serde_json:: Error > {
29+ let event: Self = match serde_json:: from_str ( json_as_str) {
30+ Ok ( event) => event,
31+ Err ( error) => return Err ( error) ,
32+ } ;
33+
34+ Ok ( event)
35+ }
36+ }
37+
2738pub struct RemoteWatcher {
2839 context : Context ,
2940 operational_sender : Sender < OperationalMessage > ,
@@ -57,62 +68,77 @@ impl RemoteWatcher {
5768 for line in str:: from_utf8 ( lines) . unwrap ( ) . lines ( ) {
5869 if line. starts_with ( "data: " ) {
5970 let json_as_str = & line[ 6 ..] ;
60- let remote_event: RemoteEvent =
61- serde_json:: from_str ( json_as_str) . unwrap ( ) ;
62- println ! (
63- "REMOTE EVENT : {}" ,
64- & remote_event. event_type. as_str( )
65- ) ;
66- if RemoteEventType :: from_str ( & remote_event. event_type . as_str ( ) )
67- . is_some ( )
68- {
69- let content_id = remote_event. fields [ "content" ]
70- . as_object ( )
71- . unwrap ( ) [ "content_id" ]
72- . as_i64 ( )
73- . unwrap ( ) ;
74- println ! ( "REMOTE EVENT content_id: {:?}" , content_id) ;
75- let message = match remote_event. event_type . as_str ( ) {
76- "content.modified.html-document"
77- | "content.modified.file"
78- | "content.modified.folder" => {
79- OperationalMessage :: ModifiedRemoteFile (
80- content_id as i32 ,
81- )
82- }
83- "content.created.html-document"
84- | "content.created.file"
85- | "content.created.folder" => {
86- OperationalMessage :: NewRemoteFile ( content_id as i32 )
87- }
88- "content.deleted.html-document"
89- | "content.deleted.file"
90- | "content.deleted.folder" => {
91- OperationalMessage :: DeletedRemoteFile (
92- content_id as i32 ,
93- )
94- }
95- "content.undeleted.html-document"
96- | "content.undeleted.file"
97- | "content.undeleted.folder" => {
98- OperationalMessage :: NewRemoteFile ( content_id as i32 )
99- }
100- _ => {
101- panic ! (
102- "Source code must cover all ACCEPTED_EVENT_TYPES"
71+ match RemoteEvent :: from_str ( json_as_str) {
72+ Ok ( remote_event) => {
73+ println ! (
74+ "REMOTE EVENT : {}" ,
75+ & remote_event. event_type. as_str( )
76+ ) ;
77+ if RemoteEventType :: from_str (
78+ & remote_event. event_type . as_str ( ) ,
10379 )
80+ . is_some ( )
81+ {
82+ let content_id = remote_event. fields [ "content" ]
83+ . as_object ( )
84+ . unwrap ( ) [ "content_id" ]
85+ . as_i64 ( )
86+ . unwrap ( ) ;
87+ println ! (
88+ "REMOTE EVENT content_id: {:?}" ,
89+ content_id
90+ ) ;
91+ let message = match remote_event. event_type . as_str ( )
92+ {
93+ "content.modified.html-document"
94+ | "content.modified.file"
95+ | "content.modified.folder" => {
96+ OperationalMessage :: ModifiedRemoteFile (
97+ content_id as i32 ,
98+ )
99+ }
100+ "content.created.html-document"
101+ | "content.created.file"
102+ | "content.created.folder" => {
103+ OperationalMessage :: NewRemoteFile (
104+ content_id as i32 ,
105+ )
106+ }
107+ "content.deleted.html-document"
108+ | "content.deleted.file"
109+ | "content.deleted.folder" => {
110+ OperationalMessage :: DeletedRemoteFile (
111+ content_id as i32 ,
112+ )
113+ }
114+ "content.undeleted.html-document"
115+ | "content.undeleted.file"
116+ | "content.undeleted.folder" => {
117+ OperationalMessage :: NewRemoteFile (
118+ content_id as i32 ,
119+ )
120+ }
121+ _ => {
122+ panic ! (
123+ "Source code must cover all ACCEPTED_EVENT_TYPES"
124+ )
125+ }
126+ } ;
127+ match self . operational_sender . send ( message) {
128+ Ok ( _) => ( ) ,
129+ Err ( err) => {
130+ eprintln ! (
131+ "Error when send operational message from remote watcher : {}" ,
132+ err
133+ )
134+ }
135+ } ;
104136 }
105- } ;
106- match self . operational_sender . send ( message) {
107- Ok ( _) => ( ) ,
108- Err ( err) => {
109- eprintln ! (
110- "Error when send operational message from remote watcher : {}" ,
111- err
112- )
113- }
114- } ;
115- }
137+ }
138+ Err ( error) => {
139+ eprintln ! ( "Error when decoding event : {}. Event as str was: {}" , error, json_as_str)
140+ }
141+ } ;
116142 }
117143 }
118144 }
0 commit comments