1use rskit_errors::AppResult;
4
5use crate::options::{BlameOptions, DescribeOptions, GrepOptions, LogOptions};
6use crate::types::{
7 BlameLine, Commit, DiffEntry, DiffStats, GrepMatch, IndexEntry, Oid, StatusEntry, TreeEntry,
8 TreeHash,
9};
10
11pub trait Differ {
13 fn diff(&self, from: &str, to: &str) -> AppResult<Vec<DiffEntry>>;
15
16 fn diff_stats(&self, from: &str, to: &str) -> AppResult<DiffStats>;
18
19 fn status(&self) -> AppResult<Vec<StatusEntry>>;
21}
22
23pub trait IgnoreReader {
25 fn is_ignored(&self, path: &str) -> AppResult<bool>;
29}
30
31pub trait IndexReader {
33 fn index_entry(&self, path: &str) -> AppResult<Option<IndexEntry>>;
35}
36
37pub trait TreeReader {
39 fn tree_hash(&self, revision: &str, path: &str) -> AppResult<TreeHash>;
41
42 fn file_at(&self, revision: &str, path: &str) -> AppResult<Vec<u8>>;
44
45 fn list_entries(&self, revision: &str, path: &str) -> AppResult<Vec<TreeEntry>>;
47}
48
49pub trait LogReader {
51 fn log(&self, opts: Option<&LogOptions>) -> AppResult<Vec<Commit>>;
53
54 fn merge_base(&self, a: &str, b: &str) -> AppResult<Oid>;
56
57 fn is_ancestor(&self, ancestor: &str, descendant: &str) -> AppResult<bool>;
59}
60
61pub trait Blamer {
63 fn blame(
65 &self,
66 revision: &str,
67 path: &str,
68 opts: Option<&BlameOptions>,
69 ) -> AppResult<Vec<BlameLine>>;
70}
71
72pub trait Inspector {
74 fn describe(&self, opts: Option<&DescribeOptions>) -> AppResult<String>;
76
77 fn rev_parse(&self, revision: &str) -> AppResult<Oid>;
79
80 fn grep(
82 &self,
83 pattern: &str,
84 revision: &str,
85 opts: Option<&GrepOptions>,
86 ) -> AppResult<Vec<GrepMatch>>;
87
88 fn show(&self, object: &str) -> AppResult<Vec<u8>>;
90}