Skip to content

Commit 03b78dd

Browse files
committed
feat(foundationdb): implement Directory.Exists
1 parent 0827de0 commit 03b78dd

File tree

2 files changed

+59
-4
lines changed

2 files changed

+59
-4
lines changed

foundationdb/src/directory/mod.rs

Lines changed: 51 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,10 @@ impl Default for DirectoryLayer {
111111
}
112112

113113
impl DirectoryLayer {
114-
/// Creates or opens the directory located at path(creating parent directories, if necessary).
114+
/// CreateOrOpen opens the directory specified by path (relative to this
115+
/// Directory), and returns the directory and its contents as a
116+
/// Subspace. If the directory does not exist, it is created
117+
/// (creating parent directories if necessary).
115118
pub async fn create_or_open(
116119
&self,
117120
txn: &Transaction,
@@ -121,14 +124,19 @@ impl DirectoryLayer {
121124
.await
122125
}
123126

124-
/// Creates a directory located at path (creating parent directories if necessary).
127+
/// Create creates a directory specified by path (relative to this
128+
/// Directory), and returns the directory and its contents as a
129+
/// Subspace (or ErrDirAlreadyExists if the directory already exists).
125130
pub async fn create(&self, txn: &Transaction, paths: Vec<String>) -> Option<DirectoryError> {
126131
self.create_or_open_internal(txn, paths, vec![], true, false)
127132
.await
128133
.err()
129134
}
130135

131-
/// Opens the directory located at path.
136+
/// Open opens the directory specified by path (relative to this Directory),
137+
/// and returns the directory and its contents as a Subspace (or Err(DirNotExists)
138+
/// error if the directory does not exist, or ErrParentDirDoesNotExist if one of the parent
139+
/// directories in the path does not exist).
132140
pub async fn open(
133141
&self,
134142
txn: &Transaction,
@@ -138,7 +146,46 @@ impl DirectoryLayer {
138146
.await
139147
}
140148

141-
/// list all sub-directory contained in the path
149+
/// Exists returns true if the directory at path (relative to the default root directory) exists, and false otherwise.
150+
pub async fn exists(
151+
&self,
152+
trx: &Transaction,
153+
paths: Vec<String>,
154+
) -> Result<bool, DirectoryError> {
155+
let nodes = self.find_nodes(trx, paths.to_owned()).await?;
156+
157+
match nodes.last() {
158+
None => Err(DirectoryError::DirNotExists),
159+
Some(_) => Ok(true),
160+
}
161+
}
162+
163+
/// Move moves the directory at oldPath to newPath (both relative to this
164+
/// Directory), and returns the directory (at its new location) and its
165+
/// contents as a Subspace. Move will return an error if a directory
166+
/// does not exist at oldPath, a directory already exists at newPath, or the
167+
/// parent directory of newPath does not exist.
168+
pub async fn move_to(
169+
&self,
170+
trx: &Transaction,
171+
old_path: Vec<String>,
172+
new_path: Vec<String>,
173+
) -> Result<bool, DirectoryError> {
174+
unimplemented!("move is not supported yet")
175+
}
176+
177+
/// Exists returns true if the directory at path (relative to this Directory)
178+
/// exists, and false otherwise.
179+
pub async fn remove(
180+
&self,
181+
trx: &Transaction,
182+
path: Vec<String>,
183+
) -> Result<bool, DirectoryError> {
184+
unimplemented!("move is not supported yet")
185+
}
186+
187+
/// List returns the names of the immediate subdirectories of the default root directory as a slice of strings.
188+
/// Each string is the name of the last component of a subdirectory's path.
142189
pub async fn list(
143190
&self,
144191
trx: &Transaction,

foundationdb/tests/directory.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,15 @@ async fn test_list(
132132
assert_eq!(sub_folders.len(), sub_path_to_create);
133133

134134
for i in 0..sub_path_to_create {
135+
let mut sub_path = paths.clone();
136+
sub_path.push(format!("node-{}", i));
135137
assert!(sub_folders.contains(&format!("node-{}", i)));
138+
139+
let trx = db.create_trx()?;
140+
match directory.exists(&trx, sub_path.to_owned()).await {
141+
Ok(_) => {}
142+
Err(err) => panic!("should have found {:?}: {:?}", sub_path, err),
143+
}
136144
}
137145

138146
Ok(())

0 commit comments

Comments
 (0)