diff options
Diffstat (limited to 'components/devtools')
-rw-r--r-- | components/devtools/actors/browsing_context.rs | 4 | ||||
-rw-r--r-- | components/devtools/actors/console.rs | 18 | ||||
-rw-r--r-- | components/devtools/actors/device.rs | 2 | ||||
-rw-r--r-- | components/devtools/actors/inspector.rs | 26 | ||||
-rw-r--r-- | components/devtools/actors/network_event.rs | 16 | ||||
-rw-r--r-- | components/devtools/actors/performance.rs | 4 | ||||
-rw-r--r-- | components/devtools/actors/preference.rs | 6 | ||||
-rw-r--r-- | components/devtools/actors/process.rs | 2 | ||||
-rw-r--r-- | components/devtools/actors/root.rs | 18 | ||||
-rw-r--r-- | components/devtools/actors/stylesheets.rs | 2 | ||||
-rw-r--r-- | components/devtools/actors/tab.rs | 2 | ||||
-rw-r--r-- | components/devtools/actors/thread.rs | 14 | ||||
-rw-r--r-- | components/devtools/actors/timeline.rs | 21 | ||||
-rw-r--r-- | components/devtools/actors/worker.rs | 2 | ||||
-rw-r--r-- | components/devtools/lib.rs | 23 | ||||
-rw-r--r-- | components/devtools/protocol.rs | 32 |
16 files changed, 107 insertions, 85 deletions
diff --git a/components/devtools/actors/browsing_context.rs b/components/devtools/actors/browsing_context.rs index 708c9f69de9..74b3a2ab677 100644 --- a/components/devtools/actors/browsing_context.rs +++ b/components/devtools/actors/browsing_context.rs @@ -160,7 +160,7 @@ impl Actor for BrowsingContextActor { } } } - stream.write_json_packet(&ReconfigureReply { from: self.name() }); + let _ = stream.write_json_packet(&ReconfigureReply { from: self.name() }); ActorMessageStatus::Processed }, @@ -215,7 +215,7 @@ impl Actor for BrowsingContextActor { title: self.title.borrow().clone(), }], }; - stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&msg); ActorMessageStatus::Processed }, diff --git a/components/devtools/actors/console.rs b/components/devtools/actors/console.rs index 4576a296775..3d79193634d 100644 --- a/components/devtools/actors/console.rs +++ b/components/devtools/actors/console.rs @@ -380,7 +380,7 @@ impl Actor for ConsoleActor { from: self.name(), messages: messages, }; - stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&msg); ActorMessageStatus::Processed }, @@ -396,7 +396,7 @@ impl Actor for ConsoleActor { .collect(), traits: StartedListenersTraits, }; - stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&msg); ActorMessageStatus::Processed }, @@ -413,7 +413,7 @@ impl Actor for ConsoleActor { .map(|listener| listener.as_str().unwrap().to_owned()) .collect(), }; - stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&msg); ActorMessageStatus::Processed }, @@ -425,13 +425,13 @@ impl Actor for ConsoleActor { matches: vec![], matchProp: "".to_owned(), }; - stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&msg); ActorMessageStatus::Processed }, "evaluateJS" => { let msg = self.evaluateJS(®istry, &msg); - stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&msg); ActorMessageStatus::Processed }, @@ -443,7 +443,9 @@ impl Actor for ConsoleActor { }; // Emit an eager reply so that the client starts listening // for an async event with the resultID - stream.write_json_packet(&early_reply); + if stream.write_json_packet(&early_reply).is_err() { + return Ok(ActorMessageStatus::Processed); + } if msg.get("eager").and_then(|v| v.as_bool()).unwrap_or(false) { // We don't support the side-effect free evaluation that eager evalaution @@ -464,7 +466,7 @@ impl Actor for ConsoleActor { helperResult: reply.helperResult, }; // Send the data from evaluateJS along with a resultID - stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&msg); ActorMessageStatus::Processed }, @@ -473,7 +475,7 @@ impl Actor for ConsoleActor { from: self.name(), updated: vec![], }; - stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&msg); ActorMessageStatus::Processed }, diff --git a/components/devtools/actors/device.rs b/components/devtools/actors/device.rs index 11785d8c0b8..d181025be39 100644 --- a/components/devtools/actors/device.rs +++ b/components/devtools/actors/device.rs @@ -44,7 +44,7 @@ impl Actor for DeviceActor { platformVersion: "71.0".to_string(), }, }; - stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&msg); ActorMessageStatus::Processed }, diff --git a/components/devtools/actors/inspector.rs b/components/devtools/actors/inspector.rs index d2f0929ac89..54dc3da2f37 100644 --- a/components/devtools/actors/inspector.rs +++ b/components/devtools/actors/inspector.rs @@ -72,13 +72,13 @@ impl Actor for HighlighterActor { Ok(match msg_type { "showBoxModel" => { let msg = ShowBoxModelReply { from: self.name() }; - stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&msg); ActorMessageStatus::Processed }, "hideBoxModel" => { let msg = HideBoxModelReply { from: self.name() }; - stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&msg); ActorMessageStatus::Processed }, @@ -123,7 +123,7 @@ impl Actor for NodeActor { )) .unwrap(); let reply = ModifyAttributeReply { from: self.name() }; - stream.write_json_packet(&reply); + let _ = stream.write_json_packet(&reply); ActorMessageStatus::Processed }, @@ -293,7 +293,7 @@ impl Actor for WalkerActor { Ok(match msg_type { "querySelector" => { let msg = QuerySelectorReply { from: self.name() }; - stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&msg); ActorMessageStatus::Processed }, @@ -310,13 +310,13 @@ impl Actor for WalkerActor { from: self.name(), node: node, }; - stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&msg); ActorMessageStatus::Processed }, "clearPseudoClassLocks" => { let msg = ClearPseudoclassesReply { from: self.name() }; - stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&msg); ActorMessageStatus::Processed }, @@ -343,7 +343,7 @@ impl Actor for WalkerActor { .collect(), from: self.name(), }; - stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&msg); ActorMessageStatus::Processed }, @@ -481,7 +481,7 @@ impl Actor for PageStyleActor { sheets: vec![], from: self.name(), }; - stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&msg); ActorMessageStatus::Processed }, @@ -491,7 +491,7 @@ impl Actor for PageStyleActor { computed: vec![], from: self.name(), }; - stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&msg); ActorMessageStatus::Processed }, @@ -576,7 +576,7 @@ impl Actor for PageStyleActor { }; let msg = serde_json::to_string(&msg).unwrap(); let msg = serde_json::from_str::<Value>(&msg).unwrap(); - stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&msg); ActorMessageStatus::Processed }, @@ -625,7 +625,7 @@ impl Actor for InspectorActor { root: node, }, }; - stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&msg); ActorMessageStatus::Processed }, @@ -647,7 +647,7 @@ impl Actor for InspectorActor { actor: self.pageStyle.borrow().clone().unwrap(), }, }; - stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&msg); ActorMessageStatus::Processed }, @@ -670,7 +670,7 @@ impl Actor for InspectorActor { actor: self.highlighter.borrow().clone().unwrap(), }, }; - stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&msg); ActorMessageStatus::Processed }, diff --git a/components/devtools/actors/network_event.rs b/components/devtools/actors/network_event.rs index 8af38f52c0c..9d17b2466bd 100644 --- a/components/devtools/actors/network_event.rs +++ b/components/devtools/actors/network_event.rs @@ -201,7 +201,7 @@ impl Actor for NetworkEventActor { headerSize: headersSize, rawHeaders: rawHeadersString, }; - stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&msg); ActorMessageStatus::Processed }, "getRequestCookies" => { @@ -217,7 +217,7 @@ impl Actor for NetworkEventActor { from: self.name(), cookies: cookies, }; - stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&msg); ActorMessageStatus::Processed }, "getRequestPostData" => { @@ -226,7 +226,7 @@ impl Actor for NetworkEventActor { postData: self.request.body.clone(), postDataDiscarded: false, }; - stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&msg); ActorMessageStatus::Processed }, "getResponseHeaders" => { @@ -251,7 +251,7 @@ impl Actor for NetworkEventActor { headerSize: headersSize, rawHeaders: rawHeadersString, }; - stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&msg); } ActorMessageStatus::Processed }, @@ -268,7 +268,7 @@ impl Actor for NetworkEventActor { from: self.name(), cookies: cookies, }; - stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&msg); ActorMessageStatus::Processed }, "getResponseContent" => { @@ -277,7 +277,7 @@ impl Actor for NetworkEventActor { content: self.response.body.clone(), contentDiscarded: self.response.body.is_none(), }; - stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&msg); ActorMessageStatus::Processed }, "getEventTimings" => { @@ -297,7 +297,7 @@ impl Actor for NetworkEventActor { timings: timingsObj, totalTime: total, }; - stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&msg); ActorMessageStatus::Processed }, "getSecurityInfo" => { @@ -308,7 +308,7 @@ impl Actor for NetworkEventActor { state: "insecure".to_owned(), }, }; - stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&msg); ActorMessageStatus::Processed }, _ => ActorMessageStatus::Ignored, diff --git a/components/devtools/actors/performance.rs b/components/devtools/actors/performance.rs index d26e4aee1d6..524c9aa6501 100644 --- a/components/devtools/actors/performance.rs +++ b/components/devtools/actors/performance.rs @@ -72,7 +72,7 @@ impl Actor for PerformanceActor { }, }, }; - stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&msg); ActorMessageStatus::Processed }, "canCurrentlyRecord" => { @@ -83,7 +83,7 @@ impl Actor for PerformanceActor { errors: vec![], }, }; - stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&msg); ActorMessageStatus::Processed }, _ => ActorMessageStatus::Ignored, diff --git a/components/devtools/actors/preference.rs b/components/devtools/actors/preference.rs index aefd8638631..5d86f16d96a 100644 --- a/components/devtools/actors/preference.rs +++ b/components/devtools/actors/preference.rs @@ -35,7 +35,7 @@ impl Actor for PreferenceActor { from: self.name(), value: false, }; - stream.write_json_packet(&reply); + let _ = stream.write_json_packet(&reply); ActorMessageStatus::Processed }, @@ -44,7 +44,7 @@ impl Actor for PreferenceActor { from: self.name(), value: "".to_owned(), }; - stream.write_json_packet(&reply); + let _ = stream.write_json_packet(&reply); ActorMessageStatus::Processed }, @@ -53,7 +53,7 @@ impl Actor for PreferenceActor { from: self.name(), value: 0, }; - stream.write_json_packet(&reply); + let _ = stream.write_json_packet(&reply); ActorMessageStatus::Processed }, diff --git a/components/devtools/actors/process.rs b/components/devtools/actors/process.rs index de9a9f96ed1..e57863f1b1e 100644 --- a/components/devtools/actors/process.rs +++ b/components/devtools/actors/process.rs @@ -41,7 +41,7 @@ impl Actor for ProcessActor { from: self.name(), workers: vec![], }; - stream.write_json_packet(&reply); + let _ = stream.write_json_packet(&reply); ActorMessageStatus::Processed }, diff --git a/components/devtools/actors/root.rs b/components/devtools/actors/root.rs index 1965d973728..f180dc64a07 100644 --- a/components/devtools/actors/root.rs +++ b/components/devtools/actors/root.rs @@ -131,7 +131,7 @@ impl Actor for RootActor { from: "root".to_owned(), addons: vec![], }; - stream.write_json_packet(&actor); + let _ = stream.write_json_packet(&actor); ActorMessageStatus::Processed }, @@ -144,7 +144,7 @@ impl Actor for RootActor { isParent: true, }], }; - stream.write_json_packet(&reply); + let _ = stream.write_json_packet(&reply); ActorMessageStatus::Processed }, @@ -157,7 +157,7 @@ impl Actor for RootActor { isParent: true, }, }; - stream.write_json_packet(&reply); + let _ = stream.write_json_packet(&reply); ActorMessageStatus::Processed }, @@ -169,7 +169,7 @@ impl Actor for RootActor { deviceActor: self.device.clone(), preferenceActor: self.preference.clone(), }; - stream.write_json_packet(&actor); + let _ = stream.write_json_packet(&actor); ActorMessageStatus::Processed }, @@ -188,7 +188,7 @@ impl Actor for RootActor { }) .collect(), }; - stream.write_json_packet(&actor); + let _ = stream.write_json_packet(&actor); ActorMessageStatus::Processed }, @@ -197,7 +197,7 @@ impl Actor for RootActor { from: self.name(), registrations: vec![], }; - stream.write_json_packet(&reply); + let _ = stream.write_json_packet(&reply); ActorMessageStatus::Processed }, @@ -210,7 +210,7 @@ impl Actor for RootActor { .map(|name| registry.find::<WorkerActor>(name).encodable()) .collect(), }; - stream.write_json_packet(&reply); + let _ = stream.write_json_packet(&reply); ActorMessageStatus::Processed }, @@ -220,7 +220,7 @@ impl Actor for RootActor { from: self.name(), tab: tab.encodable(®istry), }; - stream.write_json_packet(&reply); + let _ = stream.write_json_packet(&reply); ActorMessageStatus::Processed }, @@ -232,7 +232,7 @@ impl Actor for RootActor { device: DeviceActor::description(), }, }; - stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&msg); ActorMessageStatus::Processed }, diff --git a/components/devtools/actors/stylesheets.rs b/components/devtools/actors/stylesheets.rs index ccec3a7d30f..6ce3174de73 100644 --- a/components/devtools/actors/stylesheets.rs +++ b/components/devtools/actors/stylesheets.rs @@ -34,7 +34,7 @@ impl Actor for StyleSheetsActor { from: self.name(), styleSheets: vec![], }; - stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&msg); ActorMessageStatus::Processed }, diff --git a/components/devtools/actors/tab.rs b/components/devtools/actors/tab.rs index 1f83d246233..1f2597f91d7 100644 --- a/components/devtools/actors/tab.rs +++ b/components/devtools/actors/tab.rs @@ -54,7 +54,7 @@ impl Actor for TabDescriptorActor { let frame = registry .find::<BrowsingContextActor>(&self.browsing_context_actor) .encodable(); - stream.write_json_packet(&GetTargetReply { + let _ = stream.write_json_packet(&GetTargetReply { from: self.name(), frame, }); diff --git a/components/devtools/actors/thread.rs b/components/devtools/actors/thread.rs index f0e2f1e98a2..c241332517f 100644 --- a/components/devtools/actors/thread.rs +++ b/components/devtools/actors/thread.rs @@ -100,8 +100,8 @@ impl Actor for ThreadActor { type_: "attached".to_owned(), }, }; - stream.write_json_packet(&msg); - stream.write_json_packet(&VoidAttachedReply { from: self.name() }); + let _ = stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&VoidAttachedReply { from: self.name() }); ActorMessageStatus::Processed }, @@ -110,8 +110,8 @@ impl Actor for ThreadActor { from: self.name(), type_: "resumed".to_owned(), }; - stream.write_json_packet(&msg); - stream.write_json_packet(&VoidAttachedReply { from: self.name() }); + let _ = stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&VoidAttachedReply { from: self.name() }); ActorMessageStatus::Processed }, @@ -120,12 +120,12 @@ impl Actor for ThreadActor { from: self.name(), type_: "interrupted".to_owned(), }; - stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&msg); ActorMessageStatus::Processed }, "reconfigure" => { - stream.write_json_packet(&ReconfigureReply { from: self.name() }); + let _ = stream.write_json_packet(&ReconfigureReply { from: self.name() }); ActorMessageStatus::Processed }, @@ -134,7 +134,7 @@ impl Actor for ThreadActor { from: self.name(), sources: vec![], }; - stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&msg); ActorMessageStatus::Processed }, diff --git a/components/devtools/actors/timeline.rs b/components/devtools/actors/timeline.rs index 7ed53f9f8d4..d26fd199ebf 100644 --- a/components/devtools/actors/timeline.rs +++ b/components/devtools/actors/timeline.rs @@ -14,6 +14,7 @@ use msg::constellation_msg::PipelineId; use serde::{Serialize, Serializer}; use serde_json::{Map, Value}; use std::cell::RefCell; +use std::error::Error; use std::net::TcpStream; use std::sync::{Arc, Mutex}; use std::thread; @@ -166,7 +167,9 @@ impl TimelineActor { while let Ok(Some(marker)) = receiver.try_recv() { markers.push(emitter.marker(marker)); } - emitter.send(markers); + if emitter.send(markers).is_err() { + break; + } thread::sleep(Duration::from_millis(DEFAULT_TIMELINE_DATA_PULL_TIMEOUT)); }) @@ -235,7 +238,7 @@ impl Actor for TimelineActor { from: self.name(), value: HighResolutionStamp::new(registry.start_stamp(), PreciseTime::now()), }; - stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&msg); ActorMessageStatus::Processed }, @@ -245,7 +248,7 @@ impl Actor for TimelineActor { value: HighResolutionStamp::new(registry.start_stamp(), PreciseTime::now()), }; - stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&msg); self.script_sender .send(DropTimelineMarkers( self.pipeline, @@ -272,7 +275,7 @@ impl Actor for TimelineActor { value: self.is_recording.lock().unwrap().clone(), }; - stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&msg); ActorMessageStatus::Processed }, @@ -311,7 +314,7 @@ impl Emitter { } } - fn send(&mut self, markers: Vec<TimelineMarkerReply>) { + fn send(&mut self, markers: Vec<TimelineMarkerReply>) -> Result<(), Box<dyn Error>> { let end_time = PreciseTime::now(); let reply = MarkersEmitterReply { type_: "markers".to_owned(), @@ -319,7 +322,7 @@ impl Emitter { from: self.from.clone(), endTime: HighResolutionStamp::new(self.start_stamp, end_time), }; - self.stream.write_json_packet(&reply); + self.stream.write_json_packet(&reply)?; if let Some(ref actor_name) = self.framerate_actor { let mut lock = self.registry.lock(); @@ -331,7 +334,7 @@ impl Emitter { delta: HighResolutionStamp::new(self.start_stamp, end_time), timestamps: framerate_actor.take_pending_ticks(), }; - self.stream.write_json_packet(&framerateReply); + self.stream.write_json_packet(&framerateReply)?; } if let Some(ref actor_name) = self.memory_actor { @@ -343,7 +346,9 @@ impl Emitter { delta: HighResolutionStamp::new(self.start_stamp, end_time), measurement: memory_actor.measure(), }; - self.stream.write_json_packet(&memoryReply); + self.stream.write_json_packet(&memoryReply)?; } + + Ok(()) } } diff --git a/components/devtools/actors/worker.rs b/components/devtools/actors/worker.rs index fd578d0d3dc..8d08a563d00 100644 --- a/components/devtools/actors/worker.rs +++ b/components/devtools/actors/worker.rs @@ -82,7 +82,7 @@ impl Actor for WorkerActor { threadActor: self.thread.clone(), consoleActor: self.console.clone(), }; - stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&msg); ActorMessageStatus::Processed }, diff --git a/components/devtools/lib.rs b/components/devtools/lib.rs index 62238c656ee..524a2800c88 100644 --- a/components/devtools/lib.rs +++ b/components/devtools/lib.rs @@ -193,7 +193,10 @@ fn run_server( { let actors = actors.lock().unwrap(); let msg = actors.find::<RootActor>("root").encodable(); - stream.write_json_packet(&msg); + if let Err(e) = stream.write_json_packet(&msg) { + warn!("Error writing response: {:?}", e); + return; + } } 'outer: loop { @@ -451,7 +454,7 @@ fn run_server( eventActor: actor.event_actor(), }; for stream in &mut connections { - stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&msg); } }, NetworkEvent::HttpResponse(httpresponse) => { @@ -464,7 +467,7 @@ fn run_server( updateType: "requestHeaders".to_owned(), }; for stream in &mut connections { - stream.write_merged_json_packet(&msg, &actor.request_headers()); + let _ = stream.write_merged_json_packet(&msg, &actor.request_headers()); } let msg = NetworkEventUpdateMsg { @@ -473,7 +476,7 @@ fn run_server( updateType: "requestCookies".to_owned(), }; for stream in &mut connections { - stream.write_merged_json_packet(&msg, &actor.request_cookies()); + let _ = stream.write_merged_json_packet(&msg, &actor.request_cookies()); } //Send a networkEventUpdate (responseStart) to the client @@ -485,7 +488,7 @@ fn run_server( }; for stream in &mut connections { - stream.write_json_packet(&msg); + let _ = stream.write_json_packet(&msg); } let msg = NetworkEventUpdateMsg { from: netevent_actor_name.clone(), @@ -496,7 +499,7 @@ fn run_server( totalTime: actor.total_time(), }; for stream in &mut connections { - stream.write_merged_json_packet(&msg, &extra); + let _ = stream.write_merged_json_packet(&msg, &extra); } let msg = NetworkEventUpdateMsg { @@ -508,7 +511,7 @@ fn run_server( state: "insecure".to_owned(), }; for stream in &mut connections { - stream.write_merged_json_packet(&msg, &extra); + let _ = stream.write_merged_json_packet(&msg, &extra); } let msg = NetworkEventUpdateMsg { @@ -517,7 +520,7 @@ fn run_server( updateType: "responseContent".to_owned(), }; for stream in &mut connections { - stream.write_merged_json_packet(&msg, &actor.response_content()); + let _ = stream.write_merged_json_packet(&msg, &actor.response_content()); } let msg = NetworkEventUpdateMsg { @@ -526,7 +529,7 @@ fn run_server( updateType: "responseCookies".to_owned(), }; for stream in &mut connections { - stream.write_merged_json_packet(&msg, &actor.response_cookies()); + let _ = stream.write_merged_json_packet(&msg, &actor.response_cookies()); } let msg = NetworkEventUpdateMsg { @@ -535,7 +538,7 @@ fn run_server( updateType: "responseHeaders".to_owned(), }; for stream in &mut connections { - stream.write_merged_json_packet(&msg, &actor.response_headers()); + let _ = stream.write_merged_json_packet(&msg, &actor.response_headers()); } }, } diff --git a/components/devtools/protocol.rs b/components/devtools/protocol.rs index 29fbaa2beeb..b01c982a762 100644 --- a/components/devtools/protocol.rs +++ b/components/devtools/protocol.rs @@ -8,6 +8,7 @@ use serde::Serialize; use serde_json::{self, Value}; +use std::error::Error; use std::io::{Read, Write}; use std::net::TcpStream; @@ -26,29 +27,38 @@ pub struct Method { } pub trait JsonPacketStream { - fn write_json_packet<T: Serialize>(&mut self, obj: &T); - fn write_merged_json_packet<T: Serialize, U: Serialize>(&mut self, base: &T, extra: &U); + fn write_json_packet<T: Serialize>(&mut self, obj: &T) -> Result<(), Box<dyn Error>>; + fn write_merged_json_packet<T: Serialize, U: Serialize>( + &mut self, + base: &T, + extra: &U, + ) -> Result<(), Box<dyn Error>>; fn read_json_packet(&mut self) -> Result<Option<Value>, String>; } impl JsonPacketStream for TcpStream { - fn write_json_packet<T: Serialize>(&mut self, obj: &T) { - let s = serde_json::to_string(obj).unwrap(); + fn write_json_packet<T: Serialize>(&mut self, obj: &T) -> Result<(), Box<dyn Error>> { + let s = serde_json::to_string(obj)?; debug!("<- {}", s); - write!(self, "{}:{}", s.len(), s).unwrap(); + write!(self, "{}:{}", s.len(), s)?; + Ok(()) } - fn write_merged_json_packet<T: Serialize, U: Serialize>(&mut self, base: &T, extra: &U) { - let mut obj = serde_json::to_value(base).unwrap(); + fn write_merged_json_packet<T: Serialize, U: Serialize>( + &mut self, + base: &T, + extra: &U, + ) -> Result<(), Box<dyn Error>> { + let mut obj = serde_json::to_value(base)?; let obj = obj.as_object_mut().unwrap(); - let extra = serde_json::to_value(extra).unwrap(); + let extra = serde_json::to_value(extra)?; let extra = extra.as_object().unwrap(); for (key, value) in extra { obj.insert(key.to_owned(), value.to_owned()); } - self.write_json_packet(obj); + self.write_json_packet(obj) } fn read_json_packet(&mut self) -> Result<Option<Value>, String> { @@ -74,7 +84,9 @@ impl JsonPacketStream for TcpStream { Err(_) => return Err("packet length missing / not parsable".to_owned()), }; let mut packet = String::new(); - self.take(packet_len).read_to_string(&mut packet).unwrap(); + self.take(packet_len) + .read_to_string(&mut packet) + .map_err(|e| e.to_string())?; debug!("{}", packet); return match serde_json::from_str(&packet) { Ok(json) => Ok(Some(json)), |