forked from sdroege/gstreamer-rs
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Bus::get_pollfd generate doc for both unix & windows
There are different implementations and signatures for `get_pollfd` depending on whether the target platform is unix or windows. When generating the doc, we need both implementations to appear regardless of the target platform. This commit is inspired by the way Rust `std` library deals with `process::Command` OS dependent variants (https://doc.rust-lang.org/std/process/struct.Command.html#impl-CommandExt). Documentation can't be accurate though as we can't use the`std::os::windows` on `unix` and vice versa. As a workaround a fake fd class matching the other platform is declared. This could be further enhanced once `#[doc(cfg(...))]` is stabilized (rust-lang/rust#43781) by declaring `#[doc(cfg(unix))]` or `#[doc(cfg(windows))]` instead of the hard coded comments `This is supported on **Windows/Unix** only`. Unfortunately, these comments disappear when generating will `--all-features` because they are not part of the documentation in the gir file.
- Loading branch information
Showing
5 changed files
with
145 additions
and
28 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
// Copyright (C) 2016-2018 Sebastian Dröge <sebastian@centricular.com> | ||
// | ||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or | ||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license | ||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your | ||
// option. This file may not be copied, modified, or distributed | ||
// except according to those terms. | ||
|
||
#[macro_use] | ||
cfg_if! { | ||
if #[cfg(unix)] { | ||
use ffi; | ||
use glib_ffi; | ||
use glib::translate::ToGlibPtr; | ||
|
||
use std::mem; | ||
use std::os::unix; | ||
} else if #[cfg(feature = "dox")] { | ||
// Declare a fake RawFd for doc generation on windows | ||
pub mod unix { | ||
pub mod io { | ||
pub struct RawFd{} | ||
} | ||
} | ||
} | ||
} | ||
|
||
use super::Bus; | ||
|
||
pub trait UnixBusExtManual { | ||
fn get_pollfd(&self) -> unix::io::RawFd; | ||
} | ||
|
||
impl UnixBusExtManual for Bus { | ||
/// This is supported on **Unix** only. | ||
fn get_pollfd(&self) -> unix::io::RawFd { | ||
#[cfg(unix)] | ||
unsafe { | ||
let mut pollfd: glib_ffi::GPollFD = mem::zeroed(); | ||
ffi::gst_bus_get_pollfd(self.to_glib_none().0, &mut pollfd); | ||
|
||
pollfd.fd | ||
} | ||
|
||
#[cfg(all(not(unix), feature = "dox"))] | ||
unix::io::RawFd {} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
// Copyright (C) 2016-2018 Sebastian Dröge <sebastian@centricular.com> | ||
// | ||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or | ||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license | ||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your | ||
// option. This file may not be copied, modified, or distributed | ||
// except according to those terms. | ||
|
||
#[macro_use] | ||
cfg_if! { | ||
if #[cfg(windows)] { | ||
use ffi; | ||
use glib_ffi; | ||
use glib::translate::ToGlibPtr; | ||
|
||
use std::mem; | ||
use std::os::windows; | ||
} else if #[cfg(feature = "dox")] { | ||
// Declare a fake RawHandle for doc generation on unix | ||
pub mod windows { | ||
pub mod io { | ||
pub struct RawHandle{} | ||
} | ||
} | ||
} | ||
} | ||
|
||
use super::Bus; | ||
|
||
pub trait WindowsBusExtManual { | ||
fn get_pollfd(&self) -> windows::io::RawHandle; | ||
} | ||
|
||
impl WindowsBusExtManual for Bus { | ||
/// This is supported on **Windows** only. | ||
fn get_pollfd(&self) -> windows::io::RawHandle { | ||
#[cfg(windows)] | ||
unsafe { | ||
let mut pollfd: glib_ffi::GPollFD = mem::zeroed(); | ||
ffi::gst_bus_get_pollfd(self.to_glib_none().0, &mut pollfd); | ||
|
||
pollfd.fd as *mut _ | ||
} | ||
|
||
#[cfg(all(not(windows), feature = "dox"))] | ||
windows::io::RawHandle {} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters