Skip to main content

terminus_store/storage/
copy.rs

1use std::io;
2
3use super::{BaseLayerFiles, ChildLayerFiles, FileLoad, FileStore, IdMapFiles};
4
5use tdb_succinct::storage::copy_file;
6
7impl<F1: 'static + FileLoad + FileStore> IdMapFiles<F1> {
8    pub async fn copy_from<F2: 'static + FileLoad + FileStore>(
9        &self,
10        from: &IdMapFiles<F2>,
11    ) -> io::Result<()> {
12        self.node_value_idmap_files
13            .copy_from(&from.node_value_idmap_files)
14            .await?;
15        self.predicate_idmap_files
16            .copy_from(&from.predicate_idmap_files)
17            .await?;
18
19        Ok(())
20    }
21}
22
23impl<F1: 'static + FileLoad + FileStore> BaseLayerFiles<F1> {
24    pub async fn copy_from<F2: 'static + FileLoad + FileStore>(
25        &self,
26        from: &BaseLayerFiles<F2>,
27    ) -> io::Result<()> {
28        self.node_dictionary_files
29            .copy_from(&from.node_dictionary_files)
30            .await?;
31        self.predicate_dictionary_files
32            .copy_from(&from.predicate_dictionary_files)
33            .await?;
34        self.value_dictionary_files
35            .copy_from(&from.value_dictionary_files)
36            .await?;
37        self.id_map_files.copy_from(&from.id_map_files).await?;
38        copy_file(&from.subjects_file, &self.subjects_file).await?;
39        copy_file(&from.objects_file, &self.objects_file).await?;
40        self.s_p_adjacency_list_files
41            .copy_from(&from.s_p_adjacency_list_files)
42            .await?;
43        self.sp_o_adjacency_list_files
44            .copy_from(&from.sp_o_adjacency_list_files)
45            .await?;
46        self.o_ps_adjacency_list_files
47            .copy_from(&from.o_ps_adjacency_list_files)
48            .await?;
49        self.predicate_wavelet_tree_files
50            .copy_from(&from.predicate_wavelet_tree_files)
51            .await?;
52
53        Ok(())
54    }
55}
56
57impl<F1: 'static + FileLoad + FileStore> ChildLayerFiles<F1> {
58    pub async fn copy_from<F2: 'static + FileLoad + FileStore>(
59        &self,
60        from: &ChildLayerFiles<F2>,
61    ) -> io::Result<()> {
62        self.node_dictionary_files
63            .copy_from(&from.node_dictionary_files)
64            .await?;
65        self.predicate_dictionary_files
66            .copy_from(&from.predicate_dictionary_files)
67            .await?;
68        self.value_dictionary_files
69            .copy_from(&from.value_dictionary_files)
70            .await?;
71        self.id_map_files.copy_from(&from.id_map_files).await?;
72
73        copy_file(&from.pos_subjects_file, &self.pos_subjects_file).await?;
74        copy_file(&from.pos_objects_file, &self.pos_objects_file).await?;
75        self.pos_s_p_adjacency_list_files
76            .copy_from(&from.pos_s_p_adjacency_list_files)
77            .await?;
78        self.pos_sp_o_adjacency_list_files
79            .copy_from(&from.pos_sp_o_adjacency_list_files)
80            .await?;
81        self.pos_o_ps_adjacency_list_files
82            .copy_from(&from.pos_o_ps_adjacency_list_files)
83            .await?;
84        self.pos_predicate_wavelet_tree_files
85            .copy_from(&from.pos_predicate_wavelet_tree_files)
86            .await?;
87
88        copy_file(&from.neg_subjects_file, &self.neg_subjects_file).await?;
89        copy_file(&from.neg_objects_file, &self.neg_objects_file).await?;
90        self.neg_s_p_adjacency_list_files
91            .copy_from(&from.neg_s_p_adjacency_list_files)
92            .await?;
93        self.neg_sp_o_adjacency_list_files
94            .copy_from(&from.neg_sp_o_adjacency_list_files)
95            .await?;
96        self.neg_o_ps_adjacency_list_files
97            .copy_from(&from.neg_o_ps_adjacency_list_files)
98            .await?;
99        self.neg_predicate_wavelet_tree_files
100            .copy_from(&from.neg_predicate_wavelet_tree_files)
101            .await?;
102
103        Ok(())
104    }
105}