about summary refs log tree commit diff stats
path: root/internal/storage/files/writer.go
diff options
context:
space:
mode:
authorAlan Pearce2025-01-29 22:00:45 +0100
committerAlan Pearce2025-01-29 23:27:45 +0100
commit3162ceaa0f7997742f8c2fce1c9660e8e86ad5bb (patch)
tree14c424b8ef8b9238e69393cd7da1d0af6833526e /internal/storage/files/writer.go
parenta93b5ad88ea3cf742cf03fdeeb95f63865f08374 (diff)
downloadwebsite-3162ceaa0f7997742f8c2fce1c9660e8e86ad5bb.tar.lz
website-3162ceaa0f7997742f8c2fce1c9660e8e86ad5bb.tar.zst
website-3162ceaa0f7997742f8c2fce1c9660e8e86ad5bb.zip
use buffers as interface to storage
Diffstat (limited to 'internal/storage/files/writer.go')
-rw-r--r--internal/storage/files/writer.go74
1 files changed, 29 insertions, 45 deletions
diff --git a/internal/storage/files/writer.go b/internal/storage/files/writer.go
index ce498e7..40cf364 100644
--- a/internal/storage/files/writer.go
+++ b/internal/storage/files/writer.go
@@ -2,14 +2,15 @@ package files
 
 import (
 	"compress/gzip"
-	"context"
 	"io"
 	"os"
 	"path/filepath"
+	"time"
 
+	"go.alanpearce.eu/website/internal/buffer"
+	"go.alanpearce.eu/website/internal/storage"
 	"go.alanpearce.eu/x/log"
 
-	"github.com/a-h/templ"
 	"github.com/andybalholm/brotli"
 	"gitlab.com/tozd/go/errors"
 )
@@ -29,66 +30,49 @@ type Options struct {
 	Compress bool
 }
 
-func NewWriter(outputDirectory string, logger *log.Logger, opts *Options) *Files {
+func NewWriter(outputDirectory string, logger *log.Logger, opts *Options) (*Files, error) {
 	return &Files{
 		outputDirectory: outputDirectory,
 		options:         opts,
 		log:             logger,
+	}, nil
+}
+
+func (f *Files) NewFile(path string) *storage.File {
+	return &storage.File{
+		Path:         path,
+		ContentType:  "",
+		LastModified: time.Time{},
+		Etag:         "",
+		Encodings: map[string]*buffer.Buffer{
+			"identity": nil,
+		},
 	}
 }
 
-func (f *Files) Open(filename string) (io.ReadCloser, error) {
+func (f *Files) OpenRead(filename string) (io.ReadCloser, error) {
 	return os.Open(f.join(filename))
 }
 
-func (f *Files) OutputToFile(output io.Reader, filename string) error {
-	if err := f.Mkdirp(filepath.Dir(filename)); err != nil {
-		return err
-	}
-	f.log.Debug("outputting file", "filename", filename)
-	file, err := f.OpenFileAndVariants(filename)
-	if err != nil {
-		return errors.WithMessage(err, "could not open output file")
-	}
-	defer file.Close()
-
-	if _, err := io.Copy(file, output); err != nil {
-		return errors.WithMessage(err, "could not write output file")
-	}
-
-	return nil
+func (f *Files) OpenWrite(filename string) (io.WriteCloser, error) {
+	return openFileWrite(f.join(filename))
 }
 
-func (f *Files) RenderToFile(component templ.Component, filename string) error {
-	if err := f.Mkdirp(filepath.Dir(filename)); err != nil {
-		return err
-	}
-	f.log.Debug("outputting file", "filename", filename)
-	file, err := f.OpenFileAndVariants(filename)
+func (f *Files) Write(pathname string, content *buffer.Buffer) error {
+	filename := pathNameToFileName(pathname)
+	err := f.Mkdirp(filepath.Dir(filename))
 	if err != nil {
-		return errors.WithMessage(err, "could not open output file")
-	}
-	defer file.Close()
-
-	if err := component.Render(context.TODO(), file); err != nil {
-		return errors.WithMessage(err, "could not write output file")
+		return errors.WithMessage(err, "could not create directory")
 	}
 
-	return nil
-}
-
-func (f *Files) WriterToFile(writer io.WriterTo, filename string) error {
-	if err := f.Mkdirp(filepath.Dir(filename)); err != nil {
-		return err
-	}
-	f.log.Debug("outputting file", "filename", filename)
-	file, err := f.OpenFileAndVariants(filename)
+	fd, err := openFileWrite(f.join(filename))
 	if err != nil {
-		return errors.WithMessage(err, "could not open output file")
+		return errors.WithMessagef(err, "could not open output file")
 	}
-	defer file.Close()
+	defer fd.Close()
 
-	if _, err := writer.WriteTo(file); err != nil {
+	_, err = fd.Write(content.Bytes())
+	if err != nil {
 		return errors.WithMessage(err, "could not write output file")
 	}
 
@@ -170,7 +154,7 @@ func (f *Files) OpenFileAndVariants(filename string) (io.WriteCloser, error) {
 
 func (f *Files) Mkdirp(dir string) error {
 	f.log.Debug("creating directory", "dir", dir)
-	err := os.MkdirAll(filepath.Join(f.outputDirectory, dir), 0755)
+	err := os.MkdirAll(f.join(dir), 0755)
 
 	return errors.WithMessage(err, "could not create directory")
 }