cyfs_lib/traversal/object/
file.rs

1use super::def::*;
2use cyfs_base::*;
3
4pub struct FileObjectTraverser {
5    current: NormalObject,
6    cb: ObjectTraverserCallBackRef,
7}
8
9impl FileObjectTraverser {
10    pub fn new(current: NormalObject, cb: ObjectTraverserCallBackRef) -> Self {
11        Self { current, cb }
12    }
13
14    pub fn finish(self) -> NormalObject {
15        self.current
16    }
17
18    pub async fn tranverse(&self)-> BuckyResult<()> {
19        let object = self.current.object.object.as_ref().unwrap();
20        let file = object.as_file();
21
22        match file.body() {
23            Some(body) => match body.content().inner_chunk_list() {
24                Some(list) => {
25                    for chunk_id in list.iter() {
26                        self.append_chunk(chunk_id).await?;
27                    }
28                }
29                None => {}
30            },
31            None => {}
32        }
33
34        Ok(())
35    }
36
37    async fn append_chunk(&self, chunk_id: &ChunkId)-> BuckyResult<()> {
38        let item = TraverseChunkItem {
39            chunk_id: chunk_id.to_owned(),
40        };
41
42        self.cb.on_chunk(item).await
43    }
44}