libcryptsetup_rs/luks2/
flags.rs1use std::marker::PhantomData;
6
7use crate::{
8 consts::{
9 flags::{CryptActivate, CryptRequirement},
10 vals::CryptFlagsType,
11 },
12 device::CryptDevice,
13 err::LibcryptErr,
14};
15
16pub struct CryptLuks2FlagsHandle<'a, T> {
18 reference: &'a mut CryptDevice,
19 data: PhantomData<T>,
20}
21
22impl<'a, T> CryptLuks2FlagsHandle<'a, T> {
23 pub(crate) fn new(reference: &'a mut CryptDevice) -> Self {
24 CryptLuks2FlagsHandle {
25 reference,
26 data: PhantomData,
27 }
28 }
29}
30
31impl CryptLuks2FlagsHandle<'_, CryptActivate> {
32 pub fn persistent_flags_set(&mut self, flags: CryptActivate) -> Result<(), LibcryptErr> {
34 errno!(mutex!(libcryptsetup_rs_sys::crypt_persistent_flags_set(
35 self.reference.as_ptr(),
36 CryptFlagsType::Activation as u32,
37 flags.bits(),
38 )))
39 }
40
41 pub fn persistent_flags_get(&mut self) -> Result<CryptActivate, LibcryptErr> {
43 let mut flags_u32 = 0u32;
44 errno!(unsafe {
45 libcryptsetup_rs_sys::crypt_persistent_flags_get(
46 self.reference.as_ptr(),
47 CryptFlagsType::Activation as u32,
48 &mut flags_u32 as *mut _,
49 )
50 })
51 .and_then(|_| CryptActivate::from_bits(flags_u32).ok_or(LibcryptErr::InvalidConversion))
52 }
53}
54
55impl CryptLuks2FlagsHandle<'_, CryptRequirement> {
56 pub fn persistent_flags_set(&mut self, flags: CryptRequirement) -> Result<(), LibcryptErr> {
58 errno!(unsafe {
59 libcryptsetup_rs_sys::crypt_persistent_flags_set(
60 self.reference.as_ptr(),
61 CryptFlagsType::Requirements as u32,
62 flags.bits(),
63 )
64 })
65 }
66
67 pub fn persistent_flags_get(&mut self) -> Result<CryptRequirement, LibcryptErr> {
69 let mut flags_u32 = 0u32;
70 errno!(unsafe {
71 libcryptsetup_rs_sys::crypt_persistent_flags_get(
72 self.reference.as_ptr(),
73 CryptFlagsType::Requirements as u32,
74 &mut flags_u32 as *mut _,
75 )
76 })
77 .and_then(|_| CryptRequirement::from_bits(flags_u32).ok_or(LibcryptErr::InvalidConversion))
78 }
79}