aboutsummaryrefslogtreecommitdiffhomepage
path: root/common
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <[email protected]>2024-08-07 10:40:54 +0200
committerBjørn Erik Pedersen <[email protected]>2024-08-09 17:18:37 +0200
commit33c0938cd50dd3409f8e94878b97d789cc328f23 (patch)
treefc4cc45265b86746aa37bc3ab4445724d22a98f2 /common
parent0c3a1c7288032401327a9c4d7044e297bf3f7da6 (diff)
downloadhugo-33c0938cd50dd3409f8e94878b97d789cc328f23.tar.gz
hugo-33c0938cd50dd3409f8e94878b97d789cc328f23.zip
Add build time math rendering
While very useful on its own (and combined with the passthrough render hooks), this also serves as a proof of concept of using WASI (WebAssembly System Interface) modules in Hugo. This will be marked _experimental_ in the documentation. Not because it will be removed or changed in a dramatic way, but we need to think a little more how to best set up/configure similar services, define where these WASM files gets stored, maybe we can allow user provided WASM files plugins via Hugo Modules mounts etc. See these issues for more context: * https://github.com/gohugoio/hugo/issues/12736 * https://github.com/gohugoio/hugo/issues/12737 See #11927
Diffstat (limited to 'common')
-rw-r--r--common/hugio/writers.go30
1 files changed, 30 insertions, 0 deletions
diff --git a/common/hugio/writers.go b/common/hugio/writers.go
index 729b21715..6f439cc8b 100644
--- a/common/hugio/writers.go
+++ b/common/hugio/writers.go
@@ -81,3 +81,33 @@ func ToReadCloser(r io.Reader) io.ReadCloser {
io.NopCloser(nil),
}
}
+
+type ReadWriteCloser interface {
+ io.Reader
+ io.Writer
+ io.Closer
+}
+
+// PipeReadWriteCloser is a convenience type to create a pipe with a ReadCloser and a WriteCloser.
+type PipeReadWriteCloser struct {
+ *io.PipeReader
+ *io.PipeWriter
+}
+
+// NewPipeReadWriteCloser creates a new PipeReadWriteCloser.
+func NewPipeReadWriteCloser() PipeReadWriteCloser {
+ pr, pw := io.Pipe()
+ return PipeReadWriteCloser{pr, pw}
+}
+
+func (c PipeReadWriteCloser) Close() (err error) {
+ if err = c.PipeReader.Close(); err != nil {
+ return
+ }
+ err = c.PipeWriter.Close()
+ return
+}
+
+func (c PipeReadWriteCloser) WriteString(s string) (int, error) {
+ return c.PipeWriter.Write([]byte(s))
+}