#[allow(unused_imports)]
use crate::sys;
#[macro_export]
#[allow(non_snake_case)]
macro_rules! SizedENTRYID {
($name:ident [ $count:expr ]) => {
#[repr(C)]
#[allow(non_snake_case)]
struct $name {
pub abFlags: [u8; 4],
pub ab: [u8; $count],
}
outlook_mapi_macros::impl_sized_struct_casts!($name, $crate::sys::ENTRYID);
};
}
#[macro_export]
#[allow(non_snake_case)]
macro_rules! SizedSPropTagArray {
($name:ident [ $count:expr ]) => {
#[repr(C)]
#[allow(non_snake_case)]
struct $name {
pub cValues: u32,
pub aulPropTag: [u32; $count],
}
outlook_mapi_macros::impl_sized_struct_casts!($name, $crate::sys::SPropTagArray);
outlook_mapi_macros::impl_sized_struct_default!($name {
cValues: $count as u32,
aulPropTag: [$crate::sys::PR_NULL; $count],
});
};
}
#[macro_export]
#[allow(non_snake_case)]
macro_rules! SizedSPropProblemArray {
($name:ident [ $count:expr ]) => {
#[repr(C)]
#[allow(non_snake_case)]
struct $name {
pub cValues: u32,
pub aProblem: [$crate::sys::SPropProblem; $count],
}
outlook_mapi_macros::impl_sized_struct_casts!($name, $crate::sys::SPropProblemArray);
{
const DEFAULT_VALUE: $crate::sys::SPropProblem = $crate::sys::SPropProblem {
ulIndex: 0,
ulPropTag: $crate::sys::PR_NULL,
scode: 0,
};
outlook_mapi_macros::impl_sized_struct_default!($name {
cValues: $count as u32,
aProblem: [DEFAULT_VALUE; $count],
});
}
};
}
#[macro_export]
#[allow(non_snake_case)]
macro_rules! SizedADRLIST {
($name:ident [ $count:expr ]) => {
#[repr(C)]
#[allow(non_snake_case)]
struct $name {
pub cEntries: u32,
pub aEntries: [$crate::sys::ADRENTRY; $count],
}
outlook_mapi_macros::impl_sized_struct_casts!($name, $crate::sys::ADRLIST);
{
const DEFAULT_VALUE: $crate::sys::ADRENTRY = $crate::sys::ADRENTRY {
ulReserved1: 0,
cValues: 0,
rgPropVals: std::ptr::null_mut(),
};
outlook_mapi_macros::impl_sized_struct_default!($name {
cEntries: $count as u32,
aEntries: [DEFAULT_VALUE; $count],
});
}
};
}
#[macro_export]
#[allow(non_snake_case)]
macro_rules! SizedSRowSet {
($name:ident [ $count:expr ]) => {
#[repr(C)]
#[allow(non_snake_case)]
struct $name {
pub cRows: u32,
pub aRow: [$crate::sys::SRow; $count],
}
outlook_mapi_macros::impl_sized_struct_casts!($name, $crate::sys::SRowSet);
{
const DEFAULT_VALUE: $crate::sys::SRow = $crate::sys::SRow {
ulAdrEntryPad: 0,
cValues: 0,
lpProps: std::ptr::null_mut(),
};
outlook_mapi_macros::impl_sized_struct_default!($name {
cRows: $count as u32,
aRow: [DEFAULT_VALUE; $count],
});
}
};
}
#[macro_export]
#[allow(non_snake_case)]
macro_rules! SizedSSortOrderSet {
($name:ident [ $count:expr ]) => {
#[repr(C)]
#[allow(non_snake_case)]
struct $name {
pub cSorts: u32,
pub cCategories: u32,
pub cExpanded: u32,
pub aSort: [$crate::sys::SSortOrder; $count],
}
outlook_mapi_macros::impl_sized_struct_casts!($name, $crate::sys::SSortOrderSet);
{
const DEFAULT_VALUE: $crate::sys::SSortOrder = $crate::sys::SSortOrder {
ulPropTag: $crate::sys::PR_NULL,
ulOrder: $crate::sys::TABLE_SORT_ASCEND,
};
outlook_mapi_macros::impl_sized_struct_default!($name {
cSorts: $count as u32,
cCategories: 0,
cExpanded: 0,
aSort: [DEFAULT_VALUE; $count],
});
}
};
}
#[cfg(test)]
mod tests {
use crate::*;
use std::mem;
#[test]
fn sized_entry_id_1() {
SizedENTRYID!(EntryId[1]);
assert_eq!(mem::size_of::<sys::ENTRYID>(), mem::size_of::<EntryId>(),);
}
#[test]
fn sized_prop_tag_array_1() {
SizedSPropTagArray!(PropTagArray[1]);
assert_eq!(
mem::size_of::<sys::SPropTagArray>(),
mem::size_of::<PropTagArray>(),
);
}
#[test]
fn sized_prop_problem_array_1() {
SizedSPropProblemArray!(PropProblemArray[1]);
assert_eq!(
mem::size_of::<sys::SPropProblemArray>(),
mem::size_of::<PropProblemArray>(),
);
}
#[test]
fn sized_adr_list_1() {
SizedADRLIST!(AdrList[1]);
assert_eq!(mem::size_of::<sys::ADRLIST>(), mem::size_of::<AdrList>(),);
}
#[test]
fn sized_row_set_1() {
SizedSRowSet!(RowSet[1]);
assert_eq!(mem::size_of::<sys::SRowSet>(), mem::size_of::<RowSet>(),);
}
#[test]
fn sized_sort_order_set_1() {
SizedSSortOrderSet!(SortOrderSet[1]);
assert_eq!(
mem::size_of::<sys::SSortOrderSet>(),
mem::size_of::<SortOrderSet>(),
);
}
}