aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/pkg/compress.go
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-07-25 14:03:03 +0900
committerOphestra <cat@gensokyo.uk>2026-07-25 14:03:34 +0900
commite5abf51296fa1405c4a6314eafc1b97d247c5b60 (patch)
tree8e54f3a684dd0b875756b3a4eca13cd79ab695f1 /internal/pkg/compress.go
parente26914cd6f86341daff4c3d7282d9a8cf8e4611a (diff)
internal/pkg: decompress xz streams
This uses a port of the public domain xz implementation. Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal/pkg/compress.go')
-rw-r--r--internal/pkg/compress.go14
1 files changed, 14 insertions, 0 deletions
diff --git a/internal/pkg/compress.go b/internal/pkg/compress.go
index 62faf4fc..22f990f1 100644
--- a/internal/pkg/compress.go
+++ b/internal/pkg/compress.go
@@ -7,6 +7,7 @@ import (
"io"
"os"
+ "hakurei.app/internal/xz"
"hakurei.app/internal/zstd"
)
@@ -17,6 +18,8 @@ const (
Bzip2
// Zstd denotes a stream compressed via [zstd].
Zstd
+ // XZ denotes a stream compressed via [xz].
+ XZ
)
// A decompressArtifact is a [FileArtifact] decompressing a backing
@@ -127,6 +130,17 @@ func (a *decompressArtifact) Cure(r *RContext) (io.ReadCloser, error) {
io.Closer
}{zstd.NewReader(br), br}, nil
+ case XZ:
+ var _dr io.Reader
+ if _dr, err = xz.NewReader(br, 0); err != nil {
+ _ = br.Close()
+ return nil, err
+ }
+ return struct {
+ io.Reader
+ io.Closer
+ }{_dr, br}, nil
+
default:
return nil, os.ErrInvalid
}