summaryrefslogtreecommitdiff
path: root/internal/resource
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-07-06 09:57:54 +0300
committerPaul Buetow <paul@buetow.org>2026-07-06 09:57:54 +0300
commit72cf1553e87bef43a4d988896d98034ddfbc018c (patch)
treeaf0fc6ff0c4b2c69dcdbb10c655858d6c85cbaec /internal/resource
parent4c5b95d5e3811025e2148a6f2a059738e79ca2c9 (diff)
move more into API
Diffstat (limited to 'internal/resource')
-rw-r--r--internal/resource/dir/dir.go2
-rw-r--r--internal/resource/dir/dir_test.go2
-rw-r--r--internal/resource/dir/source.go2
-rw-r--r--internal/resource/file/file.go2
-rw-r--r--internal/resource/file/file_test.go2
-rw-r--r--internal/resource/link/link.go2
-rw-r--r--internal/resource/link/link_test.go2
-rw-r--r--internal/resource/opt/opt.go156
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)
- }
-}