Skip to content

Commit 41614ab

Browse files
committed
manage case where event is not json decodable
1 parent 0f6ca48 commit 41614ab

1 file changed

Lines changed: 80 additions & 54 deletions

File tree

src/remote.rs

Lines changed: 80 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
2738
pub 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

Comments
 (0)