diff options
author | Alan Pearce | 2025-01-29 22:00:45 +0100 |
---|---|---|
committer | Alan Pearce | 2025-01-29 23:27:45 +0100 |
commit | 3162ceaa0f7997742f8c2fce1c9660e8e86ad5bb (patch) | |
tree | 14c424b8ef8b9238e69393cd7da1d0af6833526e /internal/storage/files/writer.go | |
parent | a93b5ad88ea3cf742cf03fdeeb95f63865f08374 (diff) | |
download | website-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.go | 74 |
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") } |