#![allow(non_camel_case_types, non_snake_case)]
use crate::co;
use crate::decl::*;
use crate::dshow::{iterators::*, vts::*};
use crate::ole::privs::*;
use crate::prelude::*;
com_interface! { IEnumPins: "56a86893-0ad4-11ce-b03a-0020af0ba770";
}
impl dshow_IEnumPins for IEnumPins {}
pub trait dshow_IEnumPins: ole_IUnknown {
#[must_use]
fn iter(&self) -> impl Iterator<Item = HrResult<IPin>> + '_ {
IenumpinsIter::new(self)
}
#[must_use]
fn Next(&self) -> HrResult<Option<IPin>> {
let mut queried = unsafe { IPin::null() };
let mut fetched = 0u32;
match HrRet(unsafe {
(vt::<IEnumPinsVT>(self).Next)(
self.ptr(),
1, queried.as_mut(),
&mut fetched,
)
})
.to_hrresult()
{
Ok(_) => Ok(Some(queried)),
Err(hr) => match hr {
co::HRESULT::S_FALSE => Ok(None), hr => Err(hr), },
}
}
fn_com_noparm! { Reset: IEnumPinsVT;
}
fn Skip(&self, count: u32) -> HrResult<bool> {
HrRet(unsafe { (vt::<IEnumPinsVT>(self).Skip)(self.ptr(), count) }).to_bool_hrresult()
}
}