summary refs log tree commit diff stats
path: root/internal
diff options
context:
space:
mode:
Diffstat (limited to 'internal')
-rw-r--r--internal/builder/builder.go19
-rw-r--r--internal/storage/interface.go21
2 files changed, 34 insertions, 6 deletions
diff --git a/internal/builder/builder.go b/internal/builder/builder.go
index 7b12315..8d2f0a4 100644
--- a/internal/builder/builder.go
+++ b/internal/builder/builder.go
@@ -13,6 +13,7 @@ import (
 	"go.alanpearce.eu/website/internal/config"
 	"go.alanpearce.eu/website/internal/content"
 	"go.alanpearce.eu/website/internal/sitemap"
+	"go.alanpearce.eu/website/internal/storage"
 	"go.alanpearce.eu/website/internal/storage/files"
 	"go.alanpearce.eu/website/templates"
 	"go.alanpearce.eu/x/log"
@@ -69,11 +70,12 @@ func copyRecursive(storage storage.Writer, src string) error {
 
 }
 
-func build(ioConfig *IOConfig, config *config.Config, log *log.Logger) (*Result, error) {
-	storage := files.NewWriter(ioConfig.Destination, log, &files.Options{
-		Compress: !ioConfig.Development,
-	})
-
+func build(
+	storage storage.Writer,
+	ioConfig *IOConfig,
+	config *config.Config,
+	log *log.Logger,
+) (*Result, error) {
 	joinSource := joinSourcePath(ioConfig.Source)
 
 	log.Debug("output", "dir", ioConfig.Destination)
@@ -236,5 +238,10 @@ func BuildSite(ioConfig *IOConfig, cfg *config.Config, log *log.Logger) (*Result
 	templates.Setup()
 	loadCSS(ioConfig.Source)
 
-	return build(ioConfig, cfg, log)
+	var storage storage.Writer
+	storage = files.NewWriter(ioConfig.Destination, log, &files.Options{
+		Compress: !ioConfig.Development,
+	})
+
+	return build(storage, ioConfig, cfg, log)
 }
diff --git a/internal/storage/interface.go b/internal/storage/interface.go
new file mode 100644
index 0000000..6c8f3cd
--- /dev/null
+++ b/internal/storage/interface.go
@@ -0,0 +1,21 @@
+package storage
+
+import (
+	"io"
+
+	"github.com/a-h/templ"
+)
+
+type Writer interface {
+	Mkdirp(path string) error
+
+	Open(filename string) (io.ReadCloser, error)
+
+	OpenFileAndVariants(filename string) (io.WriteCloser, error)
+
+	OutputToFile(output io.Reader, filename string) error
+
+	RenderToFile(component templ.Component, filename string) error
+
+	WriterToFile(writer io.WriterTo, filename string) error
+}