#![allow(non_camel_case_types, non_snake_case)]
use crate::co;
use crate::decl::*;
use crate::kernel::privs::*;
use crate::macros::*;
use crate::ole::privs::*;
use crate::oleaut::{iterators::*, vts::*};
use crate::prelude::*;
com_interface! { IPropertyStore: "886d8eeb-8cf2-4446-8d02-cdba1dbdcf99";
}
impl oleaut_IPropertyStore for IPropertyStore {}
pub trait oleaut_IPropertyStore: ole_IUnknown {
#[must_use]
fn iter(&self) -> HrResult<impl DoubleEndedIterator<Item = HrResult<co::PKEY>> + '_> {
Ok(IpropertystoreIter::new(self)?)
}
fn_com_noparm! { Commit: IPropertyStoreVT;
}
#[must_use]
fn GetAt(&self, index: u32) -> HrResult<co::PKEY> {
let mut pkey = co::PKEY::default();
HrRet(unsafe { (vt::<IPropertyStoreVT>(self).GetAt)(self.ptr(), index, pvoid(&mut pkey)) })
.to_hrresult()
.map(|_| pkey)
}
#[must_use]
fn GetCount(&self) -> HrResult<u32> {
let mut count = 0u32;
HrRet(unsafe { (vt::<IPropertyStoreVT>(self).GetCount)(self.ptr(), &mut count) })
.to_hrresult()
.map(|_| count)
}
#[must_use]
fn GetValue(&self, key: &co::PKEY) -> HrResult<PropVariant> {
let mut var = PROPVARIANT::default();
match unsafe {
co::HRESULT::from_raw((vt::<IPropertyStoreVT>(self).GetValue)(
self.ptr(),
pcvoid(key),
pvoid(&mut var),
))
} {
co::HRESULT::S_OK | co::HRESULT::INPLACE_S_TRUNCATED => {
Ok(PropVariant::from_raw(&var)?)
},
hr => Err(hr),
}
}
fn SetValue(&self, key: &co::PKEY, value: &PropVariant) -> HrResult<()> {
HrRet(unsafe {
(vt::<IPropertyStoreVT>(self).SetValue)(
self.ptr(),
pcvoid(key),
pcvoid(&value.to_raw()?),
)
})
.to_hrresult()
}
}