qubit_fs/directory/
delete_options.rs1use crate::error::FsError;
11use crate::error::FsErrorKind;
12use crate::error::FsOperation;
13use crate::metadata::FileSystemCapabilities;
14use crate::metadata::FileSystemCapability;
15use crate::metadata::ResourceVersion;
16
17#[non_exhaustive]
27#[derive(Clone, Debug, Default, Eq, PartialEq)]
28pub struct DeleteOptions {
29 recursive: bool,
31 missing_ok: bool,
33 if_match: Option<ResourceVersion>,
35}
36
37impl DeleteOptions {
38 #[inline]
40 #[must_use]
41 pub const fn recursive(&self) -> bool {
42 self.recursive
43 }
44
45 #[inline]
47 #[must_use]
48 pub const fn missing_ok(&self) -> bool {
49 self.missing_ok
50 }
51
52 #[inline]
54 #[must_use]
55 pub const fn if_match(&self) -> Option<&ResourceVersion> {
56 self.if_match.as_ref()
57 }
58
59 #[inline]
61 #[must_use]
62 pub const fn with_recursive(mut self, recursive: bool) -> Self {
63 self.recursive = recursive;
64 self
65 }
66
67 #[inline]
69 #[must_use]
70 pub const fn with_missing_ok(mut self, missing_ok: bool) -> Self {
71 self.missing_ok = missing_ok;
72 self
73 }
74
75 #[inline]
77 #[must_use]
78 pub fn with_if_match(mut self, if_match: Option<ResourceVersion>) -> Self {
79 self.if_match = if_match;
80 self
81 }
82
83 pub fn validate_against(&self, capabilities: FileSystemCapabilities) -> Result<(), FsError> {
90 if self.recursive() && !capabilities.supports(FileSystemCapability::RecursiveDelete) {
91 return Err(missing_requirement(
92 FileSystemCapability::RecursiveDelete,
93 "recursive deletion is required but not supported",
94 ));
95 }
96 if self.if_match().is_some() && !capabilities.supports(FileSystemCapability::ConditionalDelete) {
97 return Err(missing_requirement(
98 FileSystemCapability::ConditionalDelete,
99 "conditional deletion is required but not supported",
100 ));
101 }
102 Ok(())
103 }
104}
105
106fn missing_requirement(capability: FileSystemCapability, message: &str) -> FsError {
108 FsError::new(FsErrorKind::RequirementNotMet, FsOperation::Delete, message).with_required_capability(capability)
109}