diff options
Diffstat (limited to 'internal/resource')
| -rw-r--r-- | internal/resource/dir/dir.go | 2 | ||||
| -rw-r--r-- | internal/resource/dir/dir_test.go | 2 | ||||
| -rw-r--r-- | internal/resource/dir/source.go | 2 | ||||
| -rw-r--r-- | internal/resource/file/file.go | 2 | ||||
| -rw-r--r-- | internal/resource/file/file_test.go | 2 | ||||
| -rw-r--r-- | internal/resource/link/link.go | 2 | ||||
| -rw-r--r-- | internal/resource/link/link_test.go | 2 | ||||
| -rw-r--r-- | internal/resource/opt/opt.go | 156 |
8 files changed, 7 insertions, 163 deletions
diff --git a/internal/resource/dir/dir.go b/internal/resource/dir/dir.go index ba50caf..34b161d 100644 --- a/internal/resource/dir/dir.go +++ b/internal/resource/dir/dir.go @@ -8,7 +8,7 @@ import ( "strconv" "codeberg.org/snonux/gonf/internal/resource" - "codeberg.org/snonux/gonf/internal/resource/opt" + opt "codeberg.org/snonux/gonf/api/option" ) type Dir struct { diff --git a/internal/resource/dir/dir_test.go b/internal/resource/dir/dir_test.go index 8b90fac..6a5bb83 100644 --- a/internal/resource/dir/dir_test.go +++ b/internal/resource/dir/dir_test.go @@ -8,7 +8,7 @@ import ( resource "codeberg.org/snonux/gonf/internal/resource" "codeberg.org/snonux/gonf/internal/resource/file" - . "codeberg.org/snonux/gonf/internal/resource/opt" + . "codeberg.org/snonux/gonf/api/option" ) func TestHaveDirectoryCreate(t *testing.T) { diff --git a/internal/resource/dir/source.go b/internal/resource/dir/source.go index 2e5ed98..b94756d 100644 --- a/internal/resource/dir/source.go +++ b/internal/resource/dir/source.go @@ -9,7 +9,7 @@ import ( "codeberg.org/snonux/gonf/internal/resource/file" "codeberg.org/snonux/gonf/internal/resource/link" - "codeberg.org/snonux/gonf/internal/resource/opt" + opt "codeberg.org/snonux/gonf/api/option" ) // copySourceTree mirrors d.source into d.path, dispatching each entry by diff --git a/internal/resource/file/file.go b/internal/resource/file/file.go index 50ba6e3..402b348 100644 --- a/internal/resource/file/file.go +++ b/internal/resource/file/file.go @@ -11,7 +11,7 @@ import ( "text/template" "codeberg.org/snonux/gonf/internal/resource" - "codeberg.org/snonux/gonf/internal/resource/opt" + opt "codeberg.org/snonux/gonf/api/option" ) type File struct { diff --git a/internal/resource/file/file_test.go b/internal/resource/file/file_test.go index 0669b88..e84ab13 100644 --- a/internal/resource/file/file_test.go +++ b/internal/resource/file/file_test.go @@ -7,7 +7,7 @@ import ( "testing" "codeberg.org/snonux/gonf/internal/resource" - . "codeberg.org/snonux/gonf/internal/resource/opt" + . "codeberg.org/snonux/gonf/api/option" ) func TestGetChecksum(t *testing.T) { diff --git a/internal/resource/link/link.go b/internal/resource/link/link.go index 0e5582c..5a1824b 100644 --- a/internal/resource/link/link.go +++ b/internal/resource/link/link.go @@ -6,7 +6,7 @@ import ( "os" "codeberg.org/snonux/gonf/internal/resource" - "codeberg.org/snonux/gonf/internal/resource/opt" + opt "codeberg.org/snonux/gonf/api/option" ) type kind int diff --git a/internal/resource/link/link_test.go b/internal/resource/link/link_test.go index 20542bd..c8d9789 100644 --- a/internal/resource/link/link_test.go +++ b/internal/resource/link/link_test.go @@ -6,7 +6,7 @@ import ( "testing" "codeberg.org/snonux/gonf/internal/resource" - . "codeberg.org/snonux/gonf/internal/resource/opt" + . "codeberg.org/snonux/gonf/api/option" ) func TestHaveSymlinkCreateAndIdempotent(t *testing.T) { diff --git a/internal/resource/opt/opt.go b/internal/resource/opt/opt.go deleted file mode 100644 index 23f076d..0000000 --- a/internal/resource/opt/opt.go +++ /dev/null @@ -1,156 +0,0 @@ -// Package opt provides interface-based, resource-agnostic configuration -// options shared by the file, dir, and link resource packages. -// -// It is designed to be dot-imported at call sites so options read as bare -// WithMode(...) / WithOwner(...) calls regardless of the resource type: -// -// import ( -// "codeberg.org/snonux/gonf/internal/resource/file" -// . "codeberg.org/snonux/gonf/internal/resource/opt" -// ) -// -// file.Have("file.txt", WithOwner("paul"), WithMode(0o755)) -// -// Each option targets a small capability interface (Owner, Moded, ...). A -// resource implements only the setters it supports. Applying an option to a -// resource that lacks the matching interface (e.g. WithPrune on a file) is a -// programming error in the resource declaration and aborts the program via -// log.Fatalf. -package opt - -import ( - "log" - "os" -) - -// Option configures a resource. It is applied to the concrete resource value -// (e.g. *file.File) during construction. -type Option func(any) - -// Capability interfaces. A resource implements only the setters it supports. -type ( - Owner interface{ SetOwner(string) } - Grouped interface{ SetGroup(string) } - Moded interface{ SetMode(os.FileMode) } - Sourced interface{ SetSource(string) } - Contented interface{ SetContent(string) } - FileModed interface{ SetFileMode(os.FileMode) } - Prunable interface{ SetPrune() } - Absentable interface{ SetAbsent() } - Linkable interface { - SetSymlink(target string) - SetHardlink(target string) - } -) - -// WithOwner sets the owning user of the resource. -func WithOwner(owner string) Option { - return func(t any) { - r, ok := t.(Owner) - if !ok { - log.Fatalf("%T does not support WithOwner", t) - } - r.SetOwner(owner) - } -} - -// WithGroup sets the owning group of the resource. -func WithGroup(group string) Option { - return func(t any) { - r, ok := t.(Grouped) - if !ok { - log.Fatalf("%T does not support WithGroup", t) - } - r.SetGroup(group) - } -} - -// WithMode sets the resource's own file mode. -func WithMode(mode os.FileMode) Option { - return func(t any) { - r, ok := t.(Moded) - if !ok { - log.Fatalf("%T does not support WithMode", t) - } - r.SetMode(mode) - } -} - -// WithSource sets the source path the resource is populated from. -func WithSource(source string) Option { - return func(t any) { - r, ok := t.(Sourced) - if !ok { - log.Fatalf("%T does not support WithSource", t) - } - r.SetSource(source) - } -} - -// WithContent sets literal content for the resource. -func WithContent(content string) Option { - return func(t any) { - r, ok := t.(Contented) - if !ok { - log.Fatalf("%T does not support WithContent", t) - } - r.SetContent(content) - } -} - -// WithFileMode sets the mode applied to regular files copied from a source -// tree (distinct from the resource's own mode). -func WithFileMode(mode os.FileMode) Option { - return func(t any) { - r, ok := t.(FileModed) - if !ok { - log.Fatalf("%T does not support WithFileMode", t) - } - r.SetFileMode(mode) - } -} - -// WithPrune enables reconciliation of extra destination entries during a -// source copy, and recursive removal during IsAbsent(). -func WithPrune() Option { - return func(t any) { - r, ok := t.(Prunable) - if !ok { - log.Fatalf("%T does not support WithPrune", t) - } - r.SetPrune() - } -} - -// IsAbsent marks the resource for removal. -func IsAbsent() Option { - return func(t any) { - r, ok := t.(Absentable) - if !ok { - log.Fatalf("%T does not support IsAbsent", t) - } - r.SetAbsent() - } -} - -// WithSymlink makes the resource a symbolic link pointing at target. -func WithSymlink(target string) Option { - return func(t any) { - r, ok := t.(Linkable) - if !ok { - log.Fatalf("%T does not support WithSymlink", t) - } - r.SetSymlink(target) - } -} - -// WithHardlink makes the resource a hard link pointing at target. -func WithHardlink(target string) Option { - return func(t any) { - r, ok := t.(Linkable) - if !ok { - log.Fatalf("%T does not support WithHardlink", t) - } - r.SetHardlink(target) - } -} |
