Skip to content

Commit c19c4d9

Browse files
committed
Removes prost, prost-build for quick-protobuf. Refactors signaling.rs to use generated SignalingMessage
1 parent 1c0807c commit c19c4d9

File tree

8 files changed

+111
-94
lines changed

8 files changed

+111
-94
lines changed

Cargo.lock

Lines changed: 1 addition & 63 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

transports/webrtc-websys/Cargo.toml

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,6 @@ rust-version = { workspace = true }
1111
version = "0.4.0"
1212
publish = true
1313

14-
[build-dependencies]
15-
prost-build = "0.13.5"
16-
1714
[dependencies]
1815
bytes = "1"
1916
futures = { workspace = true }
@@ -66,13 +63,13 @@ web-sys = { version = "0.3.70", features = [
6663
"WebSocket"
6764
]}
6865
oneshot = "0.1.11"
69-
prost = "0.13.5"
7066
multistream-select.workspace = true
7167
pin-project = "1.1.10"
7268
gloo-timers = { version = "0.3.0", features = ["futures"] }
7369
serde_json = "1.0.140"
7470
wasm-timer = "0.2.5"
7571
async-trait = "0.1.89"
72+
quick-protobuf = "0.8.1"
7673

7774
[lints]
7875
workspace = true

transports/webrtc-websys/build.rs

Lines changed: 0 additions & 7 deletions
This file was deleted.

transports/webrtc-websys/src/browser/protocol/mod.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
1-
#![allow(unreachable_pub)]
2-
pub mod pb {
3-
include!(concat!(env!("OUT_DIR"), "/signaling.rs"));
4-
}
5-
1+
pub(crate) mod proto;
62
pub(crate) mod signaling;
73
pub(crate) mod stream_protocol;
84
pub(crate) mod upgrade;
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
pub(crate) mod signaling;
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
// Automatically generated rust module for 'message.proto' file
2+
3+
#![allow(non_snake_case)]
4+
#![allow(non_upper_case_globals)]
5+
#![allow(non_camel_case_types)]
6+
#![allow(unused_imports)]
7+
#![allow(unknown_lints)]
8+
#![allow(clippy::all)]
9+
#![cfg_attr(rustfmt, rustfmt_skip)]
10+
11+
12+
use quick_protobuf::{MessageInfo, MessageRead, MessageWrite, BytesReader, Writer, WriterBackend, Result};
13+
use quick_protobuf::sizeofs::*;
14+
use super::*;
15+
16+
#[allow(clippy::derive_partial_eq_without_eq)]
17+
#[derive(Debug, Default, PartialEq, Clone)]
18+
pub struct SignalingMessage {
19+
pub type_pb: signaling::mod_SignalingMessage::Type,
20+
pub data: String,
21+
}
22+
23+
impl<'a> MessageRead<'a> for SignalingMessage {
24+
fn from_reader(r: &mut BytesReader, bytes: &'a [u8]) -> Result<Self> {
25+
let mut msg = Self::default();
26+
while !r.is_eof() {
27+
match r.next_tag(bytes) {
28+
Ok(8) => msg.type_pb = r.read_enum(bytes)?,
29+
Ok(18) => msg.data = r.read_string(bytes)?.to_owned(),
30+
Ok(t) => { r.read_unknown(bytes, t)?; }
31+
Err(e) => return Err(e),
32+
}
33+
}
34+
Ok(msg)
35+
}
36+
}
37+
38+
impl MessageWrite for SignalingMessage {
39+
fn get_size(&self) -> usize {
40+
0
41+
+ if self.type_pb == signaling::mod_SignalingMessage::Type::SDP_OFFER { 0 } else { 1 + sizeof_varint(*(&self.type_pb) as u64) }
42+
+ if self.data == String::default() { 0 } else { 1 + sizeof_len((&self.data).len()) }
43+
}
44+
45+
fn write_message<W: WriterBackend>(&self, w: &mut Writer<W>) -> Result<()> {
46+
if self.type_pb != signaling::mod_SignalingMessage::Type::SDP_OFFER { w.write_with_tag(8, |w| w.write_enum(*&self.type_pb as i32))?; }
47+
if self.data != String::default() { w.write_with_tag(18, |w| w.write_string(&**&self.data))?; }
48+
Ok(())
49+
}
50+
}
51+
52+
pub(crate) mod mod_SignalingMessage {
53+
54+
55+
#[derive(Debug, PartialEq, Eq, Clone, Copy)]
56+
pub enum Type {
57+
SDP_OFFER = 0,
58+
SDP_ANSWER = 1,
59+
ICE_CANDIDATE = 2,
60+
}
61+
62+
impl Default for Type {
63+
fn default() -> Self {
64+
Type::SDP_OFFER
65+
}
66+
}
67+
68+
impl From<i32> for Type {
69+
fn from(i: i32) -> Self {
70+
match i {
71+
0 => Type::SDP_OFFER,
72+
1 => Type::SDP_ANSWER,
73+
2 => Type::ICE_CANDIDATE,
74+
_ => Self::default(),
75+
}
76+
}
77+
}
78+
79+
impl<'a> From<&'a str> for Type {
80+
fn from(s: &'a str) -> Self {
81+
match s {
82+
"SDP_OFFER" => Type::SDP_OFFER,
83+
"SDP_ANSWER" => Type::SDP_ANSWER,
84+
"ICE_CANDIDATE" => Type::ICE_CANDIDATE,
85+
_ => Self::default(),
86+
}
87+
}
88+
}
89+
90+
}

transports/webrtc-websys/src/browser/protocol/signaling.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use web_sys::{
1313

1414
use crate::{
1515
browser::{
16-
protocol::pb::{signaling_message, SignalingMessage},
16+
protocol::proto::signaling::{mod_SignalingMessage::Type, SignalingMessage},
1717
SignalingConfig, SignalingStream,
1818
},
1919
connection::RtcPeerConnection,
@@ -444,7 +444,7 @@ impl ProtocolHandler {
444444
.unwrap_or_default();
445445

446446
let message = SignalingMessage {
447-
r#type: signaling_message::Type::IceCandidate as i32,
447+
type_pb: Type::ICE_CANDIDATE,
448448
data: candidate_as_str,
449449
};
450450

@@ -455,7 +455,7 @@ impl ProtocolHandler {
455455

456456
// Send end-of-candidates marker as an empty JSON object
457457
let end_message = SignalingMessage {
458-
r#type: signaling_message::Type::IceCandidate as i32,
458+
type_pb: Type::ICE_CANDIDATE,
459459
data: "{}".to_string(),
460460
};
461461

@@ -479,7 +479,7 @@ impl ProtocolHandler {
479479
Error::ProtoSerialization("Failed to read ICE candidate".to_string())
480480
})?;
481481

482-
if message.r#type != signaling_message::Type::IceCandidate as i32 {
482+
if message.type_pb != Type::ICE_CANDIDATE {
483483
return Err(Error::Signaling(
484484
"Expected ICE candidate message".to_string(),
485485
));
@@ -533,7 +533,7 @@ impl Signaling for ProtocolHandler {
533533
Error::ProtoSerialization("Failure to read SDP offer from signaling stream".to_string())
534534
})?;
535535

536-
if offer_message.r#type != signaling_message::Type::SdpOffer as i32 {
536+
if offer_message.type_pb != Type::SDP_OFFER {
537537
return Err(Error::Signaling("Expected SDP offer".to_string()));
538538
}
539539

@@ -560,7 +560,7 @@ impl Signaling for ProtocolHandler {
560560

561561
// Send SDP answer
562562
let answer_message = SignalingMessage {
563-
r#type: signaling_message::Type::SdpAnswer as i32,
563+
type_pb: Type::SDP_ANSWER,
564564
data: answer_sdp,
565565
};
566566

@@ -630,8 +630,8 @@ impl Signaling for ProtocolHandler {
630630

631631
// Write SDP offer to the signaling stream
632632
let message = SignalingMessage {
633-
r#type: signaling_message::Type::SdpOffer as i32,
634-
data: offer_sdp.clone(),
633+
type_pb: Type::SDP_OFFER,
634+
data: offer_sdp,
635635
};
636636

637637
pb_stream.lock().await.write(message).await.map_err(|_| {
@@ -645,7 +645,7 @@ impl Signaling for ProtocolHandler {
645645
)
646646
})?;
647647

648-
if answer_message.r#type != signaling_message::Type::SdpAnswer as i32 {
648+
if answer_message.type_pb != Type::SDP_ANSWER {
649649
return Err(Error::Signaling("Expected SDP answer".to_string()));
650650
}
651651

transports/webrtc-websys/src/browser/stream.rs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
use futures::{AsyncRead, AsyncReadExt, AsyncWrite, AsyncWriteExt};
2-
use prost::Message;
2+
use quick_protobuf::{BytesReader, Error, MessageRead, MessageWrite, Writer};
33
use tracing::info;
44

5-
use crate::browser::protocol::pb::SignalingMessage;
5+
use crate::browser::protocol::proto::signaling::SignalingMessage;
66

77
/// A wrapper over a async stream for reading and writing SignalingMesssages.
88
pub struct SignalingStream<T> {
@@ -18,10 +18,11 @@ where
1818
}
1919

2020
/// Encodes and writes a signaling message to the stream.
21-
pub async fn write(&mut self, message: SignalingMessage) -> Result<(), std::io::Error> {
21+
pub async fn write(&mut self, message: SignalingMessage) -> Result<(), Error> {
2222
info!("Writing signaling message through signaling stream");
2323
let mut buf = Vec::new();
24-
message.encode(&mut buf)?;
24+
let mut writer = Writer::new(&mut buf);
25+
message.write_message(&mut writer)?;
2526
let len = buf.len() as u32;
2627

2728
self.inner.write_all(&len.to_be_bytes()).await?;
@@ -31,7 +32,7 @@ where
3132
}
3233

3334
/// Reads and decodes a signaling message from the stream.
34-
pub async fn read(&mut self) -> Result<SignalingMessage, std::io::Error> {
35+
pub async fn read(&mut self) -> Result<SignalingMessage, Error> {
3536
info!("Reading signaling message from signaling stream");
3637
let mut len_buf = [0u8; 4];
3738
self.inner.read_exact(&mut len_buf).await?;
@@ -40,7 +41,8 @@ where
4041
let mut buf = vec![0u8; len];
4142
self.inner.read_exact(&mut buf).await?;
4243

43-
let message = SignalingMessage::decode(&buf[..])?;
44+
let mut reader = BytesReader::from_bytes(&buf);
45+
let message = SignalingMessage::from_reader(&mut reader, &buf)?;
4446
Ok(message)
4547
}
4648
}

0 commit comments

Comments
 (0)