aboutsummaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
authorRunxi Yu <me@runxiyu.org>2025-04-05 23:25:06 +0800
committerRunxi Yu <me@runxiyu.org>2025-04-05 23:25:06 +0800
commitcc5ae1a0a1b1abfb147b74e6583f15a585566cf0 (patch)
treed12ebaf7964b631ad06fd53a21e0d6c3d1480387 /internal
parentExport functions intended to be used in HTML templates (diff)
downloadforge-cc5ae1a0a1b1abfb147b74e6583f15a585566cf0.tar.gz
forge-cc5ae1a0a1b1abfb147b74e6583f15a585566cf0.tar.zst
forge-cc5ae1a0a1b1abfb147b74e6583f15a585566cf0.zip
Move trivial template functions into misc
Diffstat (limited to 'internal')
-rw-r--r--internal/misc/trivial.go48
1 files changed, 48 insertions, 0 deletions
diff --git a/internal/misc/trivial.go b/internal/misc/trivial.go
new file mode 100644
index 0000000..e59c17e
--- /dev/null
+++ b/internal/misc/trivial.go
@@ -0,0 +1,48 @@
+// SPDX-License-Identifier: AGPL-3.0-only
+// SPDX-FileCopyrightText: Copyright (c) 2025 Runxi Yu <https://runxiyu.org>
+
+package misc
+
+import (
+ "net/url"
+ "strings"
+)
+
+// These are all trivial functions that are intended to be used in HTML
+// templates.
+
+// FirstLine returns the first line of a string.
+func FirstLine(s string) string {
+ before, _, _ := strings.Cut(s, "\n")
+ return before
+}
+
+// PathEscape escapes the input as an URL path segment.
+func PathEscape(s string) string {
+ return url.PathEscape(s)
+}
+
+// QueryEscape escapes the input as an URL query segment.
+func QueryEscape(s string) string {
+ return url.QueryEscape(s)
+}
+
+// Dereference dereferences a pointer.
+func Dereference[T any](p *T) T {
+ return *p
+}
+
+// DereferenceOrZero dereferences a pointer. If the pointer is nil, the zero
+// value of its associated type is returned instead.
+func DereferenceOrZero[T any](p *T) T {
+ if p != nil {
+ return *p
+ }
+ var z T
+ return z
+}
+
+// Minus subtracts two numbers.
+func Minus(a, b int) int {
+ return a - b
+}