forked from mirrors/gstreamer-rs
Use impl Into<Option<_>>
for functions impacted by nullability fixes
This commit addresses the functions which signatures changed in
commit f9690817
so that users can still use e.g.
`query.set_result(val)` instead of `query.set_result(Some(val))`.
See [1] for an attempt at generalizing this approach.
[1]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/merge_requests/1133
This commit is contained in:
parent
bfbcdb5925
commit
4ebdfb8602
7 changed files with 112 additions and 27 deletions
|
@ -200,7 +200,7 @@ mod cairo_compositor {
|
||||||
caps
|
caps
|
||||||
};
|
};
|
||||||
|
|
||||||
q.set_result(Some(&caps));
|
q.set_result(&caps);
|
||||||
|
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
|
@ -424,7 +424,7 @@ impl App {
|
||||||
msg.src().map(|s| s.downcast::<gst::Element>().unwrap())
|
msg.src().map(|s| s.downcast::<gst::Element>().unwrap())
|
||||||
{
|
{
|
||||||
let context = gst::Context::new(context_type, true);
|
let context = gst::Context::new(context_type, true);
|
||||||
context.set_gl_display(Some(&gl_display));
|
context.set_gl_display(&gl_display);
|
||||||
el.set_context(&context);
|
el.set_context(&context);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@ pub trait ContextGLExt {
|
||||||
#[doc(alias = "gst_context_get_gl_display")]
|
#[doc(alias = "gst_context_get_gl_display")]
|
||||||
fn gl_display(&self) -> Option<GLDisplay>;
|
fn gl_display(&self) -> Option<GLDisplay>;
|
||||||
#[doc(alias = "gst_context_set_gl_display")]
|
#[doc(alias = "gst_context_set_gl_display")]
|
||||||
fn set_gl_display<T: IsA<GLDisplay>>(&self, display: Option<&T>);
|
fn set_gl_display<'a, T: IsA<GLDisplay>>(&self, display: impl Into<Option<&'a T>>);
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ContextGLExt for ContextRef {
|
impl ContextGLExt for ContextRef {
|
||||||
|
@ -29,11 +29,11 @@ impl ContextGLExt for ContextRef {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn set_gl_display<T: IsA<GLDisplay>>(&self, display: Option<&T>) {
|
fn set_gl_display<'a, T: IsA<GLDisplay>>(&self, display: impl Into<Option<&'a T>>) {
|
||||||
unsafe {
|
unsafe {
|
||||||
ffi::gst_context_set_gl_display(
|
ffi::gst_context_set_gl_display(
|
||||||
self.as_mut_ptr(),
|
self.as_mut_ptr(),
|
||||||
display.map(|d| d.as_ref()).to_glib_none().0,
|
display.into().map(|d| d.as_ref()).to_glib_none().0,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -413,7 +413,7 @@ mod tests {
|
||||||
use crate::prelude::*;
|
use crate::prelude::*;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_pool() {
|
fn pool_with_params() {
|
||||||
crate::init().unwrap();
|
crate::init().unwrap();
|
||||||
|
|
||||||
let pool = crate::BufferPool::new();
|
let pool = crate::BufferPool::new();
|
||||||
|
@ -436,4 +436,18 @@ mod tests {
|
||||||
|
|
||||||
pool.set_active(false).unwrap();
|
pool.set_active(false).unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn pool_no_params() {
|
||||||
|
crate::init().unwrap();
|
||||||
|
|
||||||
|
let pool = crate::BufferPool::new();
|
||||||
|
let mut config = pool.config();
|
||||||
|
config.set_params(None, 1024, 0, 2);
|
||||||
|
pool.set_config(config).unwrap();
|
||||||
|
|
||||||
|
pool.set_active(true).unwrap();
|
||||||
|
let _buf1 = pool.acquire_buffer(None).unwrap();
|
||||||
|
pool.set_active(false).unwrap();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -965,17 +965,29 @@ impl Uri {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[doc(alias = "gst_query_set_uri")]
|
#[doc(alias = "gst_query_set_uri")]
|
||||||
pub fn set_uri(&mut self, uri: Option<&str>) {
|
pub fn set_uri<'a, T>(&mut self, uri: impl Into<Option<&'a T>>)
|
||||||
|
where
|
||||||
|
T: 'a + AsRef<str> + ?Sized,
|
||||||
|
{
|
||||||
unsafe {
|
unsafe {
|
||||||
ffi::gst_query_set_uri(self.as_mut_ptr(), uri.to_glib_none().0);
|
ffi::gst_query_set_uri(
|
||||||
|
self.as_mut_ptr(),
|
||||||
|
uri.into().map(AsRef::as_ref).to_glib_none().0,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[doc(alias = "gst_query_set_uri_redirection")]
|
#[doc(alias = "gst_query_set_uri_redirection")]
|
||||||
#[doc(alias = "gst_query_set_uri_redirection_permanent")]
|
#[doc(alias = "gst_query_set_uri_redirection_permanent")]
|
||||||
pub fn set_redirection(&mut self, uri: Option<&str>, permanent: bool) {
|
pub fn set_redirection<'a, T>(&mut self, uri: impl Into<Option<&'a T>>, permanent: bool)
|
||||||
|
where
|
||||||
|
T: 'a + AsRef<str> + ?Sized,
|
||||||
|
{
|
||||||
unsafe {
|
unsafe {
|
||||||
ffi::gst_query_set_uri_redirection(self.as_mut_ptr(), uri.to_glib_none().0);
|
ffi::gst_query_set_uri_redirection(
|
||||||
|
self.as_mut_ptr(),
|
||||||
|
uri.into().map(AsRef::as_ref).to_glib_none().0,
|
||||||
|
);
|
||||||
ffi::gst_query_set_uri_redirection_permanent(
|
ffi::gst_query_set_uri_redirection_permanent(
|
||||||
self.0.as_mut_ptr(),
|
self.0.as_mut_ptr(),
|
||||||
permanent.into_glib(),
|
permanent.into_glib(),
|
||||||
|
@ -1453,11 +1465,12 @@ impl Caps {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[doc(alias = "gst_query_set_caps_result")]
|
#[doc(alias = "gst_query_set_caps_result")]
|
||||||
pub fn set_result(&mut self, caps: Option<&crate::Caps>) {
|
pub fn set_result<'a>(&mut self, caps: impl Into<Option<&'a crate::Caps>>) {
|
||||||
unsafe {
|
unsafe {
|
||||||
ffi::gst_query_set_caps_result(
|
ffi::gst_query_set_caps_result(
|
||||||
self.as_mut_ptr(),
|
self.as_mut_ptr(),
|
||||||
caps.map(|caps| caps.as_mut_ptr())
|
caps.into()
|
||||||
|
.map(|caps| caps.as_mut_ptr())
|
||||||
.unwrap_or(ptr::null_mut()),
|
.unwrap_or(ptr::null_mut()),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -1527,11 +1540,12 @@ impl Context {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[doc(alias = "gst_query_set_context")]
|
#[doc(alias = "gst_query_set_context")]
|
||||||
pub fn set_context(&mut self, context: Option<&crate::Context>) {
|
pub fn set_context<'a>(&mut self, context: impl Into<Option<&'a crate::Context>>) {
|
||||||
unsafe {
|
unsafe {
|
||||||
ffi::gst_query_set_context(
|
ffi::gst_query_set_context(
|
||||||
self.as_mut_ptr(),
|
self.as_mut_ptr(),
|
||||||
context
|
context
|
||||||
|
.into()
|
||||||
.map(|context| context.as_mut_ptr())
|
.map(|context| context.as_mut_ptr())
|
||||||
.unwrap_or(ptr::null_mut()),
|
.unwrap_or(ptr::null_mut()),
|
||||||
);
|
);
|
||||||
|
@ -1710,4 +1724,53 @@ mod tests {
|
||||||
let p = Position::new(crate::Format::Time);
|
let p = Position::new(crate::Format::Time);
|
||||||
assert!(!p.as_mut_ptr().is_null());
|
assert!(!p.as_mut_ptr().is_null());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn allocation_need_pool() {
|
||||||
|
crate::init().unwrap();
|
||||||
|
|
||||||
|
let mut a = Allocation::new(&crate::Caps::builder("foo/bar").build(), true);
|
||||||
|
let pool = crate::BufferPool::new();
|
||||||
|
a.add_allocation_pool(Some(&pool), 1024, 1, 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn allocation_do_not_need_pool() {
|
||||||
|
crate::init().unwrap();
|
||||||
|
|
||||||
|
let mut a = Allocation::new(&crate::Caps::builder("foo/bar").build(), false);
|
||||||
|
a.add_allocation_pool(crate::BufferPool::NONE, 1024, 1, 4);
|
||||||
|
|
||||||
|
// cannot infer type of the type parameter `T` declared on the enum `Option`
|
||||||
|
//a.add_allocation_pool(None, 1024, 1, 4);
|
||||||
|
|
||||||
|
// This would be possible if we moved the `crate::BufferPool`
|
||||||
|
// as a generic argument instead of using current arg type:
|
||||||
|
// - `pool: Option<&impl IsA<crate::BufferPool>>`
|
||||||
|
//a.add_allocation_pool::<crate::BufferPool>(None, 1024, 1, 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn set_uri() {
|
||||||
|
crate::init().unwrap();
|
||||||
|
|
||||||
|
let mut uri_q = Uri::new();
|
||||||
|
uri_q.set_uri("https://test.org");
|
||||||
|
uri_q.set_uri(&String::from("https://test.org"));
|
||||||
|
|
||||||
|
uri_q.set_uri(Some("https://test.org"));
|
||||||
|
uri_q.set_uri(Some(&String::from("https://test.org")));
|
||||||
|
|
||||||
|
// FIXME: this is commented out for now due to an inconsistent
|
||||||
|
// assertion in `GStreamer` which results in critical logs.
|
||||||
|
/*
|
||||||
|
let none: Option<&str> = None;
|
||||||
|
uri_q.set_uri(none);
|
||||||
|
|
||||||
|
let none: Option<String> = None;
|
||||||
|
uri_q.set_uri(none.as_ref());
|
||||||
|
|
||||||
|
uri_q.set_uri::<str>(None);
|
||||||
|
*/
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,11 +58,12 @@ impl TocRef {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[doc(alias = "gst_toc_set_tags")]
|
#[doc(alias = "gst_toc_set_tags")]
|
||||||
pub fn set_tags(&mut self, tag_list: Option<TagList>) {
|
pub fn set_tags(&mut self, tag_list: impl Into<Option<TagList>>) {
|
||||||
unsafe {
|
unsafe {
|
||||||
ffi::gst_toc_set_tags(
|
ffi::gst_toc_set_tags(
|
||||||
self.as_mut_ptr(),
|
self.as_mut_ptr(),
|
||||||
tag_list
|
tag_list
|
||||||
|
.into()
|
||||||
.map(|t| t.into_glib_ptr())
|
.map(|t| t.into_glib_ptr())
|
||||||
.unwrap_or(ptr::null_mut()),
|
.unwrap_or(ptr::null_mut()),
|
||||||
);
|
);
|
||||||
|
@ -70,11 +71,14 @@ impl TocRef {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[doc(alias = "gst_toc_merge_tags")]
|
#[doc(alias = "gst_toc_merge_tags")]
|
||||||
pub fn merge_tags(&mut self, tag_list: Option<&TagList>, mode: TagMergeMode) {
|
pub fn merge_tags<'a>(&mut self, tag_list: impl Into<Option<&'a TagList>>, mode: TagMergeMode) {
|
||||||
unsafe {
|
unsafe {
|
||||||
ffi::gst_toc_merge_tags(
|
ffi::gst_toc_merge_tags(
|
||||||
self.as_mut_ptr(),
|
self.as_mut_ptr(),
|
||||||
tag_list.map(|l| l.as_mut_ptr()).unwrap_or(ptr::null_mut()),
|
tag_list
|
||||||
|
.into()
|
||||||
|
.map(|l| l.as_mut_ptr())
|
||||||
|
.unwrap_or(ptr::null_mut()),
|
||||||
mode.into_glib(),
|
mode.into_glib(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -192,11 +196,12 @@ impl TocEntryRef {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[doc(alias = "gst_toc_entry_set_tags")]
|
#[doc(alias = "gst_toc_entry_set_tags")]
|
||||||
pub fn set_tags(&mut self, tag_list: Option<TagList>) {
|
pub fn set_tags(&mut self, tag_list: impl Into<Option<TagList>>) {
|
||||||
unsafe {
|
unsafe {
|
||||||
ffi::gst_toc_entry_set_tags(
|
ffi::gst_toc_entry_set_tags(
|
||||||
self.as_mut_ptr(),
|
self.as_mut_ptr(),
|
||||||
tag_list
|
tag_list
|
||||||
|
.into()
|
||||||
.map(|t| t.into_glib_ptr())
|
.map(|t| t.into_glib_ptr())
|
||||||
.unwrap_or(ptr::null_mut()),
|
.unwrap_or(ptr::null_mut()),
|
||||||
);
|
);
|
||||||
|
@ -204,11 +209,14 @@ impl TocEntryRef {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[doc(alias = "gst_toc_entry_merge_tags")]
|
#[doc(alias = "gst_toc_entry_merge_tags")]
|
||||||
pub fn merge_tags(&mut self, tag_list: Option<&TagList>, mode: TagMergeMode) {
|
pub fn merge_tags<'a>(&mut self, tag_list: impl Into<Option<&'a TagList>>, mode: TagMergeMode) {
|
||||||
unsafe {
|
unsafe {
|
||||||
ffi::gst_toc_entry_merge_tags(
|
ffi::gst_toc_entry_merge_tags(
|
||||||
self.as_mut_ptr(),
|
self.as_mut_ptr(),
|
||||||
tag_list.map(|l| l.as_mut_ptr()).unwrap_or(ptr::null_mut()),
|
tag_list
|
||||||
|
.into()
|
||||||
|
.map(|l| l.as_mut_ptr())
|
||||||
|
.unwrap_or(ptr::null_mut()),
|
||||||
mode.into_glib(),
|
mode.into_glib(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -135,7 +135,7 @@ mod tests {
|
||||||
tags.get_mut()
|
tags.get_mut()
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.add::<Title>(&"toc", TagMergeMode::Append);
|
.add::<Title>(&"toc", TagMergeMode::Append);
|
||||||
toc.set_tags(Some(tags));
|
toc.set_tags(tags);
|
||||||
|
|
||||||
let mut toc_edition = TocEntry::new(TocEntryType::Edition, "edition");
|
let mut toc_edition = TocEntry::new(TocEntryType::Edition, "edition");
|
||||||
{
|
{
|
||||||
|
@ -154,7 +154,7 @@ mod tests {
|
||||||
tags.get_mut()
|
tags.get_mut()
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.add::<Title>(&"chapter 1.1", TagMergeMode::Append);
|
.add::<Title>(&"chapter 1.1", TagMergeMode::Append);
|
||||||
toc_chap_1_1.set_tags(Some(tags));
|
toc_chap_1_1.set_tags(tags);
|
||||||
}
|
}
|
||||||
toc_chap_1.append_sub_entry(toc_chap_1_1);
|
toc_chap_1.append_sub_entry(toc_chap_1_1);
|
||||||
|
|
||||||
|
@ -166,7 +166,7 @@ mod tests {
|
||||||
tags.get_mut()
|
tags.get_mut()
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.add::<Title>(&"chapter 1.2", TagMergeMode::Append);
|
.add::<Title>(&"chapter 1.2", TagMergeMode::Append);
|
||||||
toc_chap_1_2.set_tags(Some(tags));
|
toc_chap_1_2.set_tags(tags);
|
||||||
}
|
}
|
||||||
toc_chap_1.append_sub_entry(toc_chap_1_2);
|
toc_chap_1.append_sub_entry(toc_chap_1_2);
|
||||||
}
|
}
|
||||||
|
@ -180,7 +180,7 @@ mod tests {
|
||||||
tags.get_mut()
|
tags.get_mut()
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.add::<Title>(&"chapter 2", TagMergeMode::Append);
|
.add::<Title>(&"chapter 2", TagMergeMode::Append);
|
||||||
toc_chap_2.set_tags(Some(tags));
|
toc_chap_2.set_tags(tags);
|
||||||
}
|
}
|
||||||
toc_edition.append_sub_entry(toc_chap_2);
|
toc_edition.append_sub_entry(toc_chap_2);
|
||||||
}
|
}
|
||||||
|
@ -415,7 +415,7 @@ mod tests {
|
||||||
tags.get_mut()
|
tags.get_mut()
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.add::<Title>(&"toc", TagMergeMode::Append);
|
.add::<Title>(&"toc", TagMergeMode::Append);
|
||||||
toc.set_tags(Some(tags));
|
toc.set_tags(tags);
|
||||||
|
|
||||||
let mut toc_edition = TocEntry::new(TocEntryType::Edition, "edition");
|
let mut toc_edition = TocEntry::new(TocEntryType::Edition, "edition");
|
||||||
{
|
{
|
||||||
|
@ -434,7 +434,7 @@ mod tests {
|
||||||
tags.get_mut()
|
tags.get_mut()
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.add::<Title>(&"chapter 1.1", TagMergeMode::Append);
|
.add::<Title>(&"chapter 1.1", TagMergeMode::Append);
|
||||||
toc_chap_1_1.set_tags(Some(tags));
|
toc_chap_1_1.set_tags(tags);
|
||||||
}
|
}
|
||||||
toc_chap_1.append_sub_entry(toc_chap_1_1);
|
toc_chap_1.append_sub_entry(toc_chap_1_1);
|
||||||
|
|
||||||
|
@ -446,7 +446,7 @@ mod tests {
|
||||||
tags.get_mut()
|
tags.get_mut()
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.add::<Title>(&"chapter 1.2", TagMergeMode::Append);
|
.add::<Title>(&"chapter 1.2", TagMergeMode::Append);
|
||||||
toc_chap_1_2.set_tags(Some(tags));
|
toc_chap_1_2.set_tags(tags);
|
||||||
}
|
}
|
||||||
toc_chap_1.append_sub_entry(toc_chap_1_2);
|
toc_chap_1.append_sub_entry(toc_chap_1_2);
|
||||||
}
|
}
|
||||||
|
@ -460,7 +460,7 @@ mod tests {
|
||||||
tags.get_mut()
|
tags.get_mut()
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.add::<Title>(&"chapter 2", TagMergeMode::Append);
|
.add::<Title>(&"chapter 2", TagMergeMode::Append);
|
||||||
toc_chap_2.set_tags(Some(tags));
|
toc_chap_2.set_tags(tags);
|
||||||
}
|
}
|
||||||
toc_edition.append_sub_entry(toc_chap_2);
|
toc_edition.append_sub_entry(toc_chap_2);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue