WebGLSender doesn't really implement Serializable

This commit is contained in:
Alan Jeffrey 2019-07-10 19:06:51 -05:00
parent 15be654868
commit 1b05ad4bb3
2 changed files with 38 additions and 2 deletions

View file

@ -8,6 +8,7 @@ mod ipc;
mod mpsc;
use crate::webgl::WebGLMsg;
use ipc_channel::ipc::IpcSender;
use serde::{Deserialize, Serialize};
use servo_config::opts;
use std::fmt;
@ -93,6 +94,26 @@ impl WebGLChan {
pub fn send(&self, msg: WebGLMsg) -> WebGLSendResult {
self.0.send(msg)
}
pub fn to_ipc(&self) -> IpcSender<WebGLMsg> {
match self.0 {
WebGLSender::Ipc(ref sender) => sender.clone(),
WebGLSender::Mpsc(ref mpsc_sender) => {
let (sender, receiver) =
ipc_channel::ipc::channel().expect("IPC Channel creation failed");
let mpsc_sender = mpsc_sender.clone();
ipc_channel::router::ROUTER.add_route(
receiver.to_opaque(),
Box::new(move |message| {
if let Ok(message) = message.to() {
let _ = mpsc_sender.send(message);
}
}),
);
sender
},
}
}
}
#[derive(Clone, Debug, Deserialize, Serialize)]