use std::cmp;
use windows::{
Win32::{Foundation::LPARAM, UI::Shell::SHCIDS_COLUMNMASK},
core::HRESULT,
};
use crate::folder::CompareIDs;
impl CompareIDs {
pub fn to_result(order: Option<cmp::Ordering>) -> HRESULT {
HRESULT(match order {
Some(order) => order as i16 as u16 as i32,
None => 1 << 31,
})
}
}
impl From<LPARAM> for CompareIDs {
fn from(val: LPARAM) -> Self {
let v = val.0 as u32;
CompareIDs {
column: (v & SHCIDS_COLUMNMASK as u32) as u16,
flags: (v >> 16) as u16,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn to_result() {
use cmp::Ordering::*;
let hres = CompareIDs::to_result(Some(Less));
assert_eq!(hres.0, 0xFFFF);
let hres = CompareIDs::to_result(Some(Equal));
assert_eq!(hres.0, 0);
let hres = CompareIDs::to_result(Some(Greater));
assert_eq!(hres.0, 1);
let hres = CompareIDs::to_result(None);
assert_eq!(hres.0 as u32, 0x80000000);
}
}