tokio-xmpp: add build script to work around build fail on rustc 1.48

Astro created

Change summary

tokio-xmpp/Cargo.toml         |  3 +++
tokio-xmpp/build.rs           | 11 +++++++++++
tokio-xmpp/src/xmpp_stream.rs |  8 ++++----
3 files changed, 18 insertions(+), 4 deletions(-)

Detailed changes

tokio-xmpp/Cargo.toml 🔗

@@ -26,5 +26,8 @@ trust-dns-proto = "0.19"
 xml5ever = "0.16"
 xmpp-parsers = "0.17"
 
+[build-dependencies]
+rustc_version = "0.3"
+
 [features]
 serde = ["xmpp-parsers/serde"]

tokio-xmpp/build.rs 🔗

@@ -0,0 +1,11 @@
+use rustc_version::version;
+
+fn main() {
+    let version = version().unwrap();
+
+    for major in 1..=version.major {
+        for minor in 0..=version.minor {
+            println!("cargo:rustc-cfg=rustc_least_{}_{}", major, minor);
+        }
+    }
+}

tokio-xmpp/src/xmpp_stream.rs 🔗

@@ -88,19 +88,19 @@ impl<S: AsyncRead + AsyncWrite + Unpin> Sink<Packet> for XMPPStream<S> {
         Poll::Ready(Ok(()))
     }
 
-    fn start_send(mut self: Pin<&mut Self>, item: Packet) -> Result<(), Self::Error> {
+    fn start_send(#[cfg_attr(rustc_least_1_48, allow(unused_mut))] mut self: Pin<&mut Self>, item: Packet) -> Result<(), Self::Error> {
         Pin::new(&mut self.stream.lock().unwrap().deref_mut())
             .start_send(item)
             .map_err(|e| e.into())
     }
 
-    fn poll_flush(mut self: Pin<&mut Self>, cx: &mut Context) -> Poll<Result<(), Self::Error>> {
+    fn poll_flush(#[cfg_attr(rustc_least_1_48, allow(unused_mut))] mut self: Pin<&mut Self>, cx: &mut Context) -> Poll<Result<(), Self::Error>> {
         Pin::new(&mut self.stream.lock().unwrap().deref_mut())
             .poll_flush(cx)
             .map_err(|e| e.into())
     }
 
-    fn poll_close(mut self: Pin<&mut Self>, cx: &mut Context) -> Poll<Result<(), Self::Error>> {
+    fn poll_close(#[cfg_attr(rustc_least_1_48, allow(unused_mut))] mut self: Pin<&mut Self>, cx: &mut Context) -> Poll<Result<(), Self::Error>> {
         Pin::new(&mut self.stream.lock().unwrap().deref_mut())
             .poll_close(cx)
             .map_err(|e| e.into())
@@ -111,7 +111,7 @@ impl<S: AsyncRead + AsyncWrite + Unpin> Sink<Packet> for XMPPStream<S> {
 impl<S: AsyncRead + AsyncWrite + Unpin> Stream for XMPPStream<S> {
     type Item = Result<Packet, crate::Error>;
 
-    fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context) -> Poll<Option<Self::Item>> {
+    fn poll_next(#[cfg_attr(rustc_least_1_48, allow(unused_mut))] mut self: Pin<&mut Self>, cx: &mut Context) -> Poll<Option<Self::Item>> {
         Pin::new(&mut self.stream.lock().unwrap().deref_mut())
             .poll_next(cx)
             .map(|result| result.map(|result| result.map_err(|e| e.into())))