1#[cfg(test)]
5use crate::metadata::MetadataState;
6#[cfg(test)]
7use loonfs_api::wire::control::HeadState;
8use loonfs_api::{
9 ChangeSeq, CommitId, ContentRef, DisplayName, InodeId, NameKey, NamespaceId, RevisionNo,
10};
11use serde::{Deserialize, Serialize};
12
13#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
14pub struct CommitPlan {
15 pub namespace_id: NamespaceId,
16 pub commit_id: CommitId,
17 pub apply_after_seq: ChangeSeq,
18 pub assigned_seq: ChangeSeq,
19 pub(crate) validated_ops: Vec<ValidatedOp>,
20 pub resulting_next_inode_id: InodeId,
21}
22
23#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
24pub struct ResolvedBinding {
25 pub parent_inode_id: InodeId,
26 pub name_key: NameKey,
27 pub display_name: DisplayName,
28 pub child_inode_id: InodeId,
29 pub bind_seq: ChangeSeq,
30 pub bind_delta_index: u32,
31}
32
33#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
34pub(crate) enum ValidatedOp {
35 CreateDir {
36 op_index: u32,
37 parent_inode_id: InodeId,
38 display_name: DisplayName,
39 name_key: NameKey,
40 child_inode_id: InodeId,
41 create_inode_delta_index: u32,
42 bind_delta_index: u32,
43 },
44 CreateFile {
45 op_index: u32,
46 parent_inode_id: InodeId,
47 display_name: DisplayName,
48 name_key: NameKey,
49 child_inode_id: InodeId,
50 content_ref: ContentRef,
51 create_inode_delta_index: u32,
52 bind_delta_index: u32,
53 revision_delta_index: u32,
54 },
55 ReplaceFile {
56 op_index: u32,
57 inode_id: InodeId,
58 revision_no: RevisionNo,
59 content_ref: ContentRef,
60 revision_delta_index: u32,
61 },
62 RestoreRevision {
63 op_index: u32,
64 inode_id: InodeId,
65 source_revision_no: RevisionNo,
66 revision_no: RevisionNo,
67 content_ref: ContentRef,
68 revision_delta_index: u32,
69 },
70 DeleteFile {
71 op_index: u32,
72 inode_id: InodeId,
73 source_binding: ResolvedBinding,
74 unbind_delta_index: u32,
75 tombstone_delta_index: u32,
76 },
77 Rename {
78 op_index: u32,
79 inode_id: InodeId,
80 source_binding: ResolvedBinding,
81 new_parent_inode_id: InodeId,
82 new_display_name: DisplayName,
83 new_name_key: NameKey,
84 unbind_delta_index: u32,
85 bind_delta_index: u32,
86 },
87 DeleteSubtree {
88 op_index: u32,
89 root_inode_id: InodeId,
90 source_binding: ResolvedBinding,
91 unbind_delta_index: u32,
92 tombstone_delta_index: u32,
93 },
94 Undelete {
95 op_index: u32,
96 inode_id: InodeId,
97 parent_inode_id: InodeId,
98 display_name: DisplayName,
99 name_key: NameKey,
100 target_seq: ChangeSeq,
103 target_delta_index: u32,
104 revoke_tombstone_delta_index: u32,
105 bind_delta_index: u32,
106 },
107}
108
109#[cfg(test)]
111#[derive(Debug, Clone)]
112pub(crate) struct CommitValidationContext<'a> {
113 pub head: HeadState,
114 pub metadata_state: &'a MetadataState,
115}