knotserver: simplify json response boilerplate #566

merged
opened by oppi.li targeting master from push-yqnqquktxqpx
+1 -10
knotserver/xrpc/list_keys.go
···
package xrpc
import (
-
"encoding/json"
"net/http"
"strconv"
···
response.Cursor = &nextCursor
}
-
w.Header().Set("Content-Type", "application/json")
-
if err := json.NewEncoder(w).Encode(response); err != nil {
-
x.Logger.Error("failed to encode response", "error", err)
-
writeError(w, xrpcerr.NewXrpcError(
-
xrpcerr.WithTag("InternalServerError"),
-
xrpcerr.WithMessage("failed to encode response"),
-
), http.StatusInternalServerError)
-
return
-
}
+
writeJson(w, response)
}
+1 -10
knotserver/xrpc/owner.go
···
package xrpc
import (
-
"encoding/json"
"net/http"
"tangled.sh/tangled.sh/core/api/tangled"
···
Owner: owner,
}
-
w.Header().Set("Content-Type", "application/json")
-
if err := json.NewEncoder(w).Encode(response); err != nil {
-
x.Logger.Error("failed to encode response", "error", err)
-
writeError(w, xrpcerr.NewXrpcError(
-
xrpcerr.WithTag("InternalServerError"),
-
xrpcerr.WithMessage("failed to encode response"),
-
), http.StatusInternalServerError)
-
return
-
}
+
writeJson(w, response)
}
+1 -10
knotserver/xrpc/repo_blob.go
···
import (
"crypto/sha256"
"encoding/base64"
-
"encoding/json"
"fmt"
"net/http"
"path/filepath"
···
response.MimeType = &mimeType
}
-
w.Header().Set("Content-Type", "application/json")
-
if err := json.NewEncoder(w).Encode(response); err != nil {
-
x.Logger.Error("failed to encode response", "error", err)
-
writeError(w, xrpcerr.NewXrpcError(
-
xrpcerr.WithTag("InternalServerError"),
-
xrpcerr.WithMessage("failed to encode response"),
-
), http.StatusInternalServerError)
-
return
-
}
+
writeJson(w, response)
}
// isTextualMimeType returns true if the MIME type represents textual content
+1 -10
knotserver/xrpc/repo_branch.go
···
package xrpc
import (
-
"encoding/json"
"net/http"
"net/url"
"time"
···
When: commit.Author.When.Format(time.RFC3339),
}
-
w.Header().Set("Content-Type", "application/json")
-
if err := json.NewEncoder(w).Encode(response); err != nil {
-
x.Logger.Error("failed to encode response", "error", err)
-
writeError(w, xrpcerr.NewXrpcError(
-
xrpcerr.WithTag("InternalServerError"),
-
xrpcerr.WithMessage("failed to encode response"),
-
), http.StatusInternalServerError)
-
return
-
}
+
writeJson(w, response)
}
+1 -11
knotserver/xrpc/repo_branches.go
···
package xrpc
import (
-
"encoding/json"
"net/http"
"strconv"
···
Branches: paginatedBranches,
}
-
// Write JSON response directly
-
w.Header().Set("Content-Type", "application/json")
-
if err := json.NewEncoder(w).Encode(response); err != nil {
-
x.Logger.Error("failed to encode response", "error", err)
-
writeError(w, xrpcerr.NewXrpcError(
-
xrpcerr.WithTag("InternalServerError"),
-
xrpcerr.WithMessage("failed to encode response"),
-
), http.StatusInternalServerError)
-
return
-
}
+
writeJson(w, response)
}
+2 -11
knotserver/xrpc/repo_compare.go
···
package xrpc
import (
-
"encoding/json"
"fmt"
"net/http"
···
return
}
-
resp := types.RepoFormatPatchResponse{
+
response := types.RepoFormatPatchResponse{
Rev1: commit1.Hash.String(),
Rev2: commit2.Hash.String(),
FormatPatch: formatPatch,
Patch: rawPatch,
}
-
w.Header().Set("Content-Type", "application/json")
-
if err := json.NewEncoder(w).Encode(resp); err != nil {
-
x.Logger.Error("failed to encode response", "error", err)
-
writeError(w, xrpcerr.NewXrpcError(
-
xrpcerr.WithTag("InternalServerError"),
-
xrpcerr.WithMessage("failed to encode response"),
-
), http.StatusInternalServerError)
-
return
-
}
+
writeJson(w, response)
}
+2 -11
knotserver/xrpc/repo_diff.go
···
package xrpc
import (
-
"encoding/json"
"net/http"
"tangled.sh/tangled.sh/core/knotserver/git"
···
return
}
-
resp := types.RepoCommitResponse{
+
response := types.RepoCommitResponse{
Ref: ref,
Diff: diff,
}
-
w.Header().Set("Content-Type", "application/json")
-
if err := json.NewEncoder(w).Encode(resp); err != nil {
-
x.Logger.Error("failed to encode response", "error", err)
-
writeError(w, xrpcerr.NewXrpcError(
-
xrpcerr.WithTag("InternalServerError"),
-
xrpcerr.WithMessage("failed to encode response"),
-
), http.StatusInternalServerError)
-
return
-
}
+
writeJson(w, response)
}
+1 -10
knotserver/xrpc/repo_get_default_branch.go
···
package xrpc
import (
-
"encoding/json"
"net/http"
"time"
···
When: time.UnixMicro(0).Format(time.RFC3339),
}
-
w.Header().Set("Content-Type", "application/json")
-
if err := json.NewEncoder(w).Encode(response); err != nil {
-
x.Logger.Error("failed to encode response", "error", err)
-
writeError(w, xrpcerr.NewXrpcError(
-
xrpcerr.WithTag("InternalServerError"),
-
xrpcerr.WithMessage("failed to encode response"),
-
), http.StatusInternalServerError)
-
return
-
}
+
writeJson(w, response)
}
+1 -10
knotserver/xrpc/repo_languages.go
···
import (
"context"
-
"encoding/json"
"math"
"net/http"
"time"
···
response.TotalFiles = &totalFiles
}
-
w.Header().Set("Content-Type", "application/json")
-
if err := json.NewEncoder(w).Encode(response); err != nil {
-
x.Logger.Error("failed to encode response", "error", err)
-
writeError(w, xrpcerr.NewXrpcError(
-
xrpcerr.WithTag("InternalServerError"),
-
xrpcerr.WithMessage("failed to encode response"),
-
), http.StatusInternalServerError)
-
return
-
}
+
writeJson(w, response)
}
+1 -11
knotserver/xrpc/repo_log.go
···
package xrpc
import (
-
"encoding/json"
"net/http"
"strconv"
···
response.Log = true
-
// Write JSON response directly
-
w.Header().Set("Content-Type", "application/json")
-
if err := json.NewEncoder(w).Encode(response); err != nil {
-
x.Logger.Error("failed to encode response", "error", err)
-
writeError(w, xrpcerr.NewXrpcError(
-
xrpcerr.WithTag("InternalServerError"),
-
xrpcerr.WithMessage("failed to encode response"),
-
), http.StatusInternalServerError)
-
return
-
}
+
writeJson(w, response)
}
+1 -11
knotserver/xrpc/repo_tags.go
···
package xrpc
import (
-
"encoding/json"
"net/http"
"strconv"
···
Tags: paginatedTags,
}
-
// Write JSON response directly
-
w.Header().Set("Content-Type", "application/json")
-
if err := json.NewEncoder(w).Encode(response); err != nil {
-
x.Logger.Error("failed to encode response", "error", err)
-
writeError(w, xrpcerr.NewXrpcError(
-
xrpcerr.WithTag("InternalServerError"),
-
xrpcerr.WithMessage("failed to encode response"),
-
), http.StatusInternalServerError)
-
return
-
}
+
writeJson(w, response)
}
+1 -10
knotserver/xrpc/repo_tree.go
···
package xrpc
import (
-
"encoding/json"
"net/http"
"path/filepath"
"time"
···
Files: treeEntries,
}
-
w.Header().Set("Content-Type", "application/json")
-
if err := json.NewEncoder(w).Encode(response); err != nil {
-
x.Logger.Error("failed to encode response", "error", err)
-
writeError(w, xrpcerr.NewXrpcError(
-
xrpcerr.WithTag("InternalServerError"),
-
xrpcerr.WithMessage("failed to encode response"),
-
), http.StatusInternalServerError)
-
return
-
}
+
writeJson(w, response)
}
+1 -11
knotserver/xrpc/version.go
···
package xrpc
import (
-
"encoding/json"
"fmt"
"net/http"
"runtime/debug"
"tangled.sh/tangled.sh/core/api/tangled"
-
xrpcerr "tangled.sh/tangled.sh/core/xrpc/errors"
)
// version is set during build time.
···
Version: version,
}
-
w.Header().Set("Content-Type", "application/json")
-
if err := json.NewEncoder(w).Encode(response); err != nil {
-
x.Logger.Error("failed to encode response", "error", err)
-
writeError(w, xrpcerr.NewXrpcError(
-
xrpcerr.WithTag("InternalServerError"),
-
xrpcerr.WithMessage("failed to encode response"),
-
), http.StatusInternalServerError)
-
return
-
}
+
writeJson(w, response)
}
+8
knotserver/xrpc/xrpc.go
···
w.WriteHeader(status)
json.NewEncoder(w).Encode(e)
}
+
+
func writeJson(w http.ResponseWriter, response any) {
+
w.Header().Set("Content-Type", "application/json")
+
if err := json.NewEncoder(w).Encode(response); err != nil {
+
writeError(w, xrpcerr.GenericError(err), http.StatusInternalServerError)
+
return
+
}
+
}