aboutsummaryrefslogtreecommitdiffstats
path: root/lib/pama/pama.go
diff options
context:
space:
mode:
Diffstat (limited to 'lib/pama/pama.go')
-rw-r--r--lib/pama/pama.go51
1 files changed, 51 insertions, 0 deletions
diff --git a/lib/pama/pama.go b/lib/pama/pama.go
new file mode 100644
index 00000000..6fe91fee
--- /dev/null
+++ b/lib/pama/pama.go
@@ -0,0 +1,51 @@
+package pama
+
+import (
+ "fmt"
+
+ "git.sr.ht/~rjarry/aerc/lib/pama/models"
+ "git.sr.ht/~rjarry/aerc/lib/pama/revctrl"
+ "git.sr.ht/~rjarry/aerc/lib/pama/store"
+)
+
+type (
+ detectFn func(string) (string, string, error)
+ rcFn func(string, string) (models.RevisionController, error)
+ storeFn func() models.PersistentStorer
+)
+
+type PatchManager struct {
+ detect detectFn
+ rc rcFn
+ store storeFn
+}
+
+func New() PatchManager {
+ return PatchManager{
+ detect: revctrl.Detect,
+ rc: revctrl.New,
+ store: store.Store,
+ }
+}
+
+func FromFunc(d detectFn, r rcFn, s storeFn) PatchManager {
+ return PatchManager{
+ detect: d,
+ rc: r,
+ store: s,
+ }
+}
+
+func storeErr(err error) error {
+ if err == nil {
+ return nil
+ }
+ return fmt.Errorf("store error: %w", err)
+}
+
+func revErr(err error) error {
+ if err == nil {
+ return nil
+ }
+ return fmt.Errorf("revision control error: %w", err)
+}