aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/http/server.go4
-rw-r--r--lib/memfs/doc.go1
-rw-r--r--lib/memfs/embed.go7
-rw-r--r--lib/memfs/embed_options.go9
-rw-r--r--lib/memfs/internal/test/embed/embed_test.go17
-rw-r--r--lib/memfs/internal/test/embed_disable_modtime/embed_test.go17
-rw-r--r--lib/memfs/memfs.go76
-rw-r--r--lib/memfs/node.go92
-rw-r--r--lib/memfs/node_test.go14
-rw-r--r--lib/memfs/template.go1
10 files changed, 10 insertions, 228 deletions
diff --git a/lib/http/server.go b/lib/http/server.go
index bccc098e..a3c4e474 100644
--- a/lib/http/server.go
+++ b/lib/http/server.go
@@ -494,10 +494,6 @@ func (srv *Server) HandleFS(res http.ResponseWriter, req *http.Request) {
res.Header().Set(HeaderContentType, node.ContentType)
- if len(node.ContentEncoding) > 0 {
- res.Header().Set(HeaderContentEncoding, node.ContentEncoding)
- }
-
responseETag := strconv.FormatInt(node.ModTime().Unix(), 10)
requestETag := req.Header.Get(HeaderIfNoneMatch)
if requestETag == responseETag {
diff --git a/lib/memfs/doc.go b/lib/memfs/doc.go
index da62aed2..56aa1083 100644
--- a/lib/memfs/doc.go
+++ b/lib/memfs/doc.go
@@ -80,7 +80,6 @@
// PackageName: "mypackage",
// VarName: "myFS",
// GoFileName: "mypackage/embed.go",
-// ContentEncoding: memfs.EncodingGzip,
// },
// }
// mfs, _ := memfs.New(opts)
diff --git a/lib/memfs/embed.go b/lib/memfs/embed.go
index 7cadcc47..6712fdad 100644
--- a/lib/memfs/embed.go
+++ b/lib/memfs/embed.go
@@ -52,13 +52,6 @@ func (mfs *MemFS) GoEmbed() (err error) {
return fmt.Errorf("%s: %w", logp, err)
}
- if len(mfs.Opts.Embed.ContentEncoding) > 0 {
- err = mfs.ContentEncode(mfs.Opts.Embed.ContentEncoding)
- if err != nil {
- return fmt.Errorf("%s: %w", logp, err)
- }
- }
-
names := mfs.ListNames()
err = tmpl.ExecuteTemplate(f, templateNameHeader, mfs.Opts.Embed.PackageName)
diff --git a/lib/memfs/embed_options.go b/lib/memfs/embed_options.go
index 67d45f57..b1522276 100644
--- a/lib/memfs/embed_options.go
+++ b/lib/memfs/embed_options.go
@@ -21,15 +21,6 @@ type EmbedOptions struct {
// in current directory from where its called.
GoFileName string
- // ContentEncoding if this value is not empty, it will encode the
- // content of node and set the node ContentEncoding.
- //
- // List of available encoding is "gzip".
- //
- // For example, if the value is "gzip" it will compress the content of
- // file using gzip and set Node.ContentEncoding to "gzip".
- ContentEncoding string
-
// WithoutModTime if its true, the modification time for all
// files and directories are not stored inside generated code, instead
// all files will use the current time when the program is running.
diff --git a/lib/memfs/internal/test/embed/embed_test.go b/lib/memfs/internal/test/embed/embed_test.go
index d66da751..27be6ba7 100644
--- a/lib/memfs/internal/test/embed/embed_test.go
+++ b/lib/memfs/internal/test/embed/embed_test.go
@@ -11,7 +11,6 @@ func generate_testdata() *memfs.Node {
SysPath: "testdata",
Path: "/",
ContentType: "",
- ContentEncoding: "",
}
node.SetMode(2147484141)
node.SetModTimeUnix(1633772772, 881353676)
@@ -32,7 +31,6 @@ func generate_testdata_direct() *memfs.Node {
SysPath: "testdata/direct",
Path: "/direct",
ContentType: "",
- ContentEncoding: "",
}
node.SetMode(2147484141)
node.SetModTimeUnix(1569586540, 0)
@@ -47,7 +45,6 @@ func generate_testdata_direct_add() *memfs.Node {
SysPath: "testdata/direct/add",
Path: "/direct/add",
ContentType: "",
- ContentEncoding: "",
}
node.SetMode(2147484141)
node.SetModTimeUnix(1569586540, 0)
@@ -63,7 +60,6 @@ func generate_testdata_direct_add_file() *memfs.Node {
SysPath: "testdata/direct/add/file",
Path: "/direct/add/file",
ContentType: "text/plain; charset=utf-8",
- ContentEncoding: "",
Content: []byte("\x54\x65\x73\x74\x20\x64\x69\x72\x65\x63\x74\x20\x61\x64\x64\x20\x66\x69\x6C\x65\x2E\x0A"),
}
node.SetMode(420)
@@ -78,7 +74,6 @@ func generate_testdata_direct_add_file2() *memfs.Node {
SysPath: "testdata/direct/add/file2",
Path: "/direct/add/file2",
ContentType: "text/plain; charset=utf-8",
- ContentEncoding: "",
Content: []byte("\x54\x65\x73\x74\x20\x64\x69\x72\x65\x63\x74\x20\x61\x64\x64\x20\x66\x69\x6C\x65\x20\x32\x2E\x0A"),
}
node.SetMode(420)
@@ -93,7 +88,6 @@ func generate_testdata_exclude() *memfs.Node {
SysPath: "testdata/exclude",
Path: "/exclude",
ContentType: "",
- ContentEncoding: "",
}
node.SetMode(2147484141)
node.SetModTimeUnix(1633792794, 467899662)
@@ -110,7 +104,6 @@ func generate_testdata_exclude_index_link_css() *memfs.Node {
SysPath: "testdata/exclude/index-link.css",
Path: "/exclude/index-link.css",
ContentType: "text/css; charset=utf-8",
- ContentEncoding: "",
Content: []byte("\x62\x6F\x64\x79\x20\x7B\x0A\x7D\x0A"),
}
node.SetMode(420)
@@ -125,7 +118,6 @@ func generate_testdata_exclude_index_link_html() *memfs.Node {
SysPath: "testdata/exclude/index-link.html",
Path: "/exclude/index-link.html",
ContentType: "text/html; charset=utf-8",
- ContentEncoding: "",
Content: []byte("\x3C\x68\x74\x6D\x6C\x3E\x3C\x2F\x68\x74\x6D\x6C\x3E\x0A"),
}
node.SetMode(420)
@@ -140,7 +132,6 @@ func generate_testdata_exclude_index_link_js() *memfs.Node {
SysPath: "testdata/exclude/index-link.js",
Path: "/exclude/index-link.js",
ContentType: "text/javascript; charset=utf-8",
- ContentEncoding: "",
Content: []byte("\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x58\x28\x29\x20\x7B\x7D\x0A"),
}
node.SetMode(420)
@@ -155,7 +146,6 @@ func generate_testdata_include() *memfs.Node {
SysPath: "testdata/include",
Path: "/include",
ContentType: "",
- ContentEncoding: "",
}
node.SetMode(2147484141)
node.SetModTimeUnix(1629623653, 749800911)
@@ -172,7 +162,6 @@ func generate_testdata_include_index_css() *memfs.Node {
SysPath: "testdata/include/index.css",
Path: "/include/index.css",
ContentType: "text/css; charset=utf-8",
- ContentEncoding: "",
Content: []byte("\x62\x6F\x64\x79\x20\x7B\x0A\x7D\x0A"),
}
node.SetMode(420)
@@ -187,7 +176,6 @@ func generate_testdata_include_index_html() *memfs.Node {
SysPath: "testdata/include/index.html",
Path: "/include/index.html",
ContentType: "text/html; charset=utf-8",
- ContentEncoding: "",
Content: []byte("\x3C\x68\x74\x6D\x6C\x3E\x3C\x2F\x68\x74\x6D\x6C\x3E\x0A"),
}
node.SetMode(420)
@@ -202,7 +190,6 @@ func generate_testdata_include_index_js() *memfs.Node {
SysPath: "testdata/include/index.js",
Path: "/include/index.js",
ContentType: "text/javascript; charset=utf-8",
- ContentEncoding: "",
Content: []byte("\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x58\x28\x29\x20\x7B\x7D\x0A"),
}
node.SetMode(420)
@@ -217,7 +204,6 @@ func generate_testdata_index_css() *memfs.Node {
SysPath: "testdata/index.css",
Path: "/index.css",
ContentType: "text/css; charset=utf-8",
- ContentEncoding: "",
Content: []byte("\x62\x6F\x64\x79\x20\x7B\x0A\x7D\x0A"),
}
node.SetMode(420)
@@ -232,7 +218,6 @@ func generate_testdata_index_html() *memfs.Node {
SysPath: "testdata/index.html",
Path: "/index.html",
ContentType: "text/html; charset=utf-8",
- ContentEncoding: "",
Content: []byte("\x3C\x68\x74\x6D\x6C\x3E\x3C\x2F\x68\x74\x6D\x6C\x3E\x0A"),
}
node.SetMode(420)
@@ -247,7 +232,6 @@ func generate_testdata_index_js() *memfs.Node {
SysPath: "testdata/index.js",
Path: "/index.js",
ContentType: "text/javascript; charset=utf-8",
- ContentEncoding: "",
Content: []byte("\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x58\x28\x29\x20\x7B\x7D\x0A"),
}
node.SetMode(420)
@@ -262,7 +246,6 @@ func generate_testdata_plain() *memfs.Node {
SysPath: "testdata/plain",
Path: "/plain",
ContentType: "text/plain; charset=utf-8",
- ContentEncoding: "",
Content: []byte("\x54\x68\x69\x73\x20\x69\x73\x20\x61\x20\x70\x6C\x61\x69\x6E\x20\x74\x65\x78\x74\x2E\x0A"),
}
node.SetMode(420)
diff --git a/lib/memfs/internal/test/embed_disable_modtime/embed_test.go b/lib/memfs/internal/test/embed_disable_modtime/embed_test.go
index 30ea9192..42d177dd 100644
--- a/lib/memfs/internal/test/embed_disable_modtime/embed_test.go
+++ b/lib/memfs/internal/test/embed_disable_modtime/embed_test.go
@@ -11,7 +11,6 @@ func generate_testdata() *memfs.Node {
SysPath: "testdata",
Path: "/",
ContentType: "",
- ContentEncoding: "",
}
node.SetMode(2147484141)
node.SetName("/")
@@ -31,7 +30,6 @@ func generate_testdata_direct() *memfs.Node {
SysPath: "testdata/direct",
Path: "/direct",
ContentType: "",
- ContentEncoding: "",
}
node.SetMode(2147484141)
node.SetName("direct")
@@ -45,7 +43,6 @@ func generate_testdata_direct_add() *memfs.Node {
SysPath: "testdata/direct/add",
Path: "/direct/add",
ContentType: "",
- ContentEncoding: "",
}
node.SetMode(2147484141)
node.SetName("add")
@@ -60,7 +57,6 @@ func generate_testdata_direct_add_file() *memfs.Node {
SysPath: "testdata/direct/add/file",
Path: "/direct/add/file",
ContentType: "text/plain; charset=utf-8",
- ContentEncoding: "",
Content: []byte("\x54\x65\x73\x74\x20\x64\x69\x72\x65\x63\x74\x20\x61\x64\x64\x20\x66\x69\x6C\x65\x2E\x0A"),
}
node.SetMode(420)
@@ -74,7 +70,6 @@ func generate_testdata_direct_add_file2() *memfs.Node {
SysPath: "testdata/direct/add/file2",
Path: "/direct/add/file2",
ContentType: "text/plain; charset=utf-8",
- ContentEncoding: "",
Content: []byte("\x54\x65\x73\x74\x20\x64\x69\x72\x65\x63\x74\x20\x61\x64\x64\x20\x66\x69\x6C\x65\x20\x32\x2E\x0A"),
}
node.SetMode(420)
@@ -88,7 +83,6 @@ func generate_testdata_exclude() *memfs.Node {
SysPath: "testdata/exclude",
Path: "/exclude",
ContentType: "",
- ContentEncoding: "",
}
node.SetMode(2147484141)
node.SetName("exclude")
@@ -104,7 +98,6 @@ func generate_testdata_exclude_index_link_css() *memfs.Node {
SysPath: "testdata/exclude/index-link.css",
Path: "/exclude/index-link.css",
ContentType: "text/css; charset=utf-8",
- ContentEncoding: "",
Content: []byte("\x62\x6F\x64\x79\x20\x7B\x0A\x7D\x0A"),
}
node.SetMode(420)
@@ -118,7 +111,6 @@ func generate_testdata_exclude_index_link_html() *memfs.Node {
SysPath: "testdata/exclude/index-link.html",
Path: "/exclude/index-link.html",
ContentType: "text/html; charset=utf-8",
- ContentEncoding: "",
Content: []byte("\x3C\x68\x74\x6D\x6C\x3E\x3C\x2F\x68\x74\x6D\x6C\x3E\x0A"),
}
node.SetMode(420)
@@ -132,7 +124,6 @@ func generate_testdata_exclude_index_link_js() *memfs.Node {
SysPath: "testdata/exclude/index-link.js",
Path: "/exclude/index-link.js",
ContentType: "text/javascript; charset=utf-8",
- ContentEncoding: "",
Content: []byte("\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x58\x28\x29\x20\x7B\x7D\x0A"),
}
node.SetMode(420)
@@ -146,7 +137,6 @@ func generate_testdata_include() *memfs.Node {
SysPath: "testdata/include",
Path: "/include",
ContentType: "",
- ContentEncoding: "",
}
node.SetMode(2147484141)
node.SetName("include")
@@ -162,7 +152,6 @@ func generate_testdata_include_index_css() *memfs.Node {
SysPath: "testdata/include/index.css",
Path: "/include/index.css",
ContentType: "text/css; charset=utf-8",
- ContentEncoding: "",
Content: []byte("\x62\x6F\x64\x79\x20\x7B\x0A\x7D\x0A"),
}
node.SetMode(420)
@@ -176,7 +165,6 @@ func generate_testdata_include_index_html() *memfs.Node {
SysPath: "testdata/include/index.html",
Path: "/include/index.html",
ContentType: "text/html; charset=utf-8",
- ContentEncoding: "",
Content: []byte("\x3C\x68\x74\x6D\x6C\x3E\x3C\x2F\x68\x74\x6D\x6C\x3E\x0A"),
}
node.SetMode(420)
@@ -190,7 +178,6 @@ func generate_testdata_include_index_js() *memfs.Node {
SysPath: "testdata/include/index.js",
Path: "/include/index.js",
ContentType: "text/javascript; charset=utf-8",
- ContentEncoding: "",
Content: []byte("\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x58\x28\x29\x20\x7B\x7D\x0A"),
}
node.SetMode(420)
@@ -204,7 +191,6 @@ func generate_testdata_index_css() *memfs.Node {
SysPath: "testdata/index.css",
Path: "/index.css",
ContentType: "text/css; charset=utf-8",
- ContentEncoding: "",
Content: []byte("\x62\x6F\x64\x79\x20\x7B\x0A\x7D\x0A"),
}
node.SetMode(420)
@@ -218,7 +204,6 @@ func generate_testdata_index_html() *memfs.Node {
SysPath: "testdata/index.html",
Path: "/index.html",
ContentType: "text/html; charset=utf-8",
- ContentEncoding: "",
Content: []byte("\x3C\x68\x74\x6D\x6C\x3E\x3C\x2F\x68\x74\x6D\x6C\x3E\x0A"),
}
node.SetMode(420)
@@ -232,7 +217,6 @@ func generate_testdata_index_js() *memfs.Node {
SysPath: "testdata/index.js",
Path: "/index.js",
ContentType: "text/javascript; charset=utf-8",
- ContentEncoding: "",
Content: []byte("\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x58\x28\x29\x20\x7B\x7D\x0A"),
}
node.SetMode(420)
@@ -246,7 +230,6 @@ func generate_testdata_plain() *memfs.Node {
SysPath: "testdata/plain",
Path: "/plain",
ContentType: "text/plain; charset=utf-8",
- ContentEncoding: "",
Content: []byte("\x54\x68\x69\x73\x20\x69\x73\x20\x61\x20\x70\x6C\x61\x69\x6E\x20\x74\x65\x78\x74\x2E\x0A"),
}
node.SetMode(420)
diff --git a/lib/memfs/memfs.go b/lib/memfs/memfs.go
index fe924439..e1841dae 100644
--- a/lib/memfs/memfs.go
+++ b/lib/memfs/memfs.go
@@ -6,9 +6,7 @@ package memfs
import (
"bytes"
- "compress/gzip"
"fmt"
- "io"
"log"
"net/http"
"os"
@@ -24,12 +22,7 @@ import (
libstrings "github.com/shuLhan/share/lib/strings"
)
-//
-// List of valid content encoding for ContentEncode().
-//
const (
- EncodingGzip = "gzip"
-
defContentType = "text/plain" // Default content type for empty file.
)
@@ -231,64 +224,6 @@ func (mfs *MemFS) AddFile(internalPath, externalPath string) (node *Node, err er
}
//
-// ContentEncode encode each node's content into specific encoding, in other
-// words this method can be used to compress the content of file in memory
-// or before being served or written.
-//
-// Only file with size greater than 0 will be encoded.
-//
-// List of known encoding is "gzip".
-//
-func (mfs *MemFS) ContentEncode(encoding string) (err error) {
- var (
- logp = "ContentEncode"
- buf bytes.Buffer
- encoder io.WriteCloser
- )
-
- encoding = strings.ToLower(encoding)
-
- switch encoding {
- case EncodingGzip:
- encoder = gzip.NewWriter(&buf)
- default:
- return fmt.Errorf("%s: invalid encoding %q", logp, encoding)
- }
-
- nodes := mfs.PathNodes.Nodes()
- for _, node := range nodes {
- if node.mode.IsDir() || len(node.Content) == 0 {
- continue
- }
-
- _, err = encoder.Write(node.Content)
- if err != nil {
- return fmt.Errorf("%s: %w", logp, err)
- }
-
- err = encoder.Close()
- if err != nil {
- return fmt.Errorf("%s: %w", logp, err)
- }
-
- node.Content = make([]byte, buf.Len())
- copy(node.Content, buf.Bytes())
-
- node.ContentEncoding = encoding
- node.size = int64(len(node.Content))
-
- buf.Reset()
-
- if encoding == EncodingGzip {
- gziper := encoder.(*gzip.Writer)
- gziper.Reset(&buf)
- }
- }
-
- return nil
-}
-
-//
// Get the node representation of file in memory. If path is not exist it
// will return os.ErrNotExist.
//
@@ -376,11 +311,6 @@ func (mfs *MemFS) Search(words []string, snippetLen int) (results []SearchResult
snippetLen = 60
}
- var (
- logp = "Search"
- err error
- )
-
tokens := libstrings.ToBytes(words)
for x := 0; x < len(tokens); x++ {
tokens[x] = bytes.ToLower(tokens[x])
@@ -397,11 +327,7 @@ func (mfs *MemFS) Search(words []string, snippetLen int) (results []SearchResult
}
if len(node.lowerv) == 0 {
- _, err = node.Decode()
- if err != nil {
- log.Printf("%s: %s", logp, err)
- continue
- }
+ node.plainv = node.Content
if strings.HasPrefix(node.ContentType, "text/html") {
node.plainv = sanitize.HTML(node.plainv)
diff --git a/lib/memfs/node.go b/lib/memfs/node.go
index f134f814..4311102d 100644
--- a/lib/memfs/node.go
+++ b/lib/memfs/node.go
@@ -6,7 +6,6 @@ package memfs
import (
"bytes"
- "compress/gzip"
"encoding/base64"
"errors"
"fmt"
@@ -35,14 +34,13 @@ type Node struct {
os.FileInfo
http.File
- SysPath string // The original file path in system.
- Path string // Absolute file path in memory.
- Content []byte // Content of file.
- ContentType string // File type per MIME, for example "application/json".
- ContentEncoding string // File type encoding, for example "gzip".
- Parent *Node // Pointer to parent directory.
- Childs []*Node // List of files in directory.
- GenFuncName string // The function name for embedded Go code.
+ SysPath string // The original file path in system.
+ Path string // Absolute file path in memory.
+ Content []byte // Content of file.
+ ContentType string // File type per MIME, for example "application/json".
+ Parent *Node // Pointer to parent directory.
+ Childs []*Node // List of files in directory.
+ GenFuncName string // The function name for embedded Go code.
name string // File name.
modTime time.Time // ModTime contains file modification time.
@@ -145,77 +143,6 @@ func (node *Node) Close() error {
return nil
}
-//
-// Decode the contents of node (for example, uncompress with gzip) and return
-// it.
-//
-func (node *Node) Decode() ([]byte, error) {
- if len(node.ContentEncoding) == 0 {
- node.plainv = node.Content
- return node.plainv, nil
- }
-
- logp := "Decode"
- node.plainv = node.plainv[:0]
-
- if node.ContentEncoding == EncodingGzip {
- r, err := gzip.NewReader(bytes.NewReader(node.Content))
- if err != nil {
- return nil, fmt.Errorf("%s: %w", logp, err)
- }
-
- buf := make([]byte, 1024)
- for {
- n, err := r.Read(buf)
- if n > 0 {
- node.plainv = append(node.plainv, buf[:n]...)
- }
- if err != nil {
- if err == io.EOF {
- break
- }
- return nil, fmt.Errorf("%s: %w", logp, err)
- }
- buf = buf[0:]
- }
- }
-
- return node.plainv, nil
-}
-
-//
-// Encode compress and set the content of Node.
-//
-func (node *Node) Encode(content []byte) (err error) {
- logp := "Encode"
-
- node.plainv = content
- node.lowerv = bytes.ToLower(content)
-
- switch node.ContentEncoding {
- case EncodingGzip:
- var buf bytes.Buffer
- gz := gzip.NewWriter(&buf)
-
- _, err = gz.Write(content)
- if err != nil {
- _ = gz.Close()
- return fmt.Errorf("%s: %w", logp, err)
- }
-
- err = gz.Close()
- if err != nil {
- return fmt.Errorf("%s: %w", logp, err)
- }
-
- node.Content = libbytes.Copy(buf.Bytes())
-
- default:
- node.Content = content
- }
- return nil
-}
-
func (node *Node) IsDir() bool {
return node.mode.IsDir()
}
@@ -319,11 +246,8 @@ func (node *Node) Save(content []byte) (err error) {
if err != nil {
return fmt.Errorf("%s: %w", logp, err)
}
- err = node.Encode(content)
- if err != nil {
- return fmt.Errorf("%s: %w", logp, err)
- }
+ node.Content = content
node.modTime = time.Now()
node.size = int64(len(content))
return nil
diff --git a/lib/memfs/node_test.go b/lib/memfs/node_test.go
index 271bcbaa..0a625d03 100644
--- a/lib/memfs/node_test.go
+++ b/lib/memfs/node_test.go
@@ -148,24 +148,12 @@ func TestNode_Save(t *testing.T) {
contentEncoding string
expContent []byte
}{{
- desc: "Without content encoding",
+ desc: "With non empty content",
content: []byte("ABC"),
expContent: []byte("ABC"),
- }, {
- desc: "With content encoding is gzip",
- contentEncoding: EncodingGzip,
- content: []byte("ABC"),
- expContent: []byte{
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xff, 0x72, 0x74, 0x72, 0x06, 0x04, 0x00,
- 0x00, 0xff, 0xff, 0x48, 0x03, 0x83, 0xa3, 0x03,
- 0x00, 0x00, 0x00,
- },
}}
for _, c := range cases {
- node.ContentEncoding = c.contentEncoding
-
err = node.Save(c.content)
if err != nil {
t.Fatal(err)
diff --git a/lib/memfs/template.go b/lib/memfs/template.go
index 35bf8ac4..4751408e 100644
--- a/lib/memfs/template.go
+++ b/lib/memfs/template.go
@@ -55,7 +55,6 @@ func {{ .Node.GenFuncName}}() *memfs.Node {
SysPath: "{{.Node.SysPath}}",
Path: "{{.Node.Path}}",
ContentType: "{{.Node.ContentType}}",
- ContentEncoding: "{{.Node.ContentEncoding}}",
{{- if .Node.Content }}
Content: []byte("{{range $x, $c := .Node.Content}}{{ printf "\\x%02X" $c }}{{end}}"),
{{- end }}