- Removing interface{} from codebase
- Modernizing some loops
---
api/directives/directives.go | 10 +-
api/graph/model/cursor.go | 2 +-
cmd/global.go | 2 +-
core/routes.go | 2 +-
pinboard/routes_test.go | 256 +++++++++++++++++------------------
valid/valid.go | 25 ++--
6 files changed, 147 insertions(+), 150 deletions(-)
diff --git a/api/directives/directives.go b/api/directives/directives.go
index 3faabcf..fd58eb8 100644
--- a/api/directives/directives.go
+++ b/api/directives/directives.go
@@ -10,7 +10,7 @@ import (
)
// Admin ...
-func Admin(ctx context.Context, obj interface{}, next graphql.Resolver) (interface{}, error) {
+func Admin(ctx context.Context, obj any, next graphql.Resolver) (any, error) {
tokenUser := oauth2.ForContext(ctx)
if tokenUser == nil {
return nil, fmt.Errorf("Admin auth access denied")
@@ -22,7 +22,7 @@ func Admin(ctx context.Context, obj interface{}, next graphql.Resolver) (interfa
}
// Internal ...
-func Internal(ctx context.Context, obj interface{}, next graphql.Resolver) (interface{}, error) {
+func Internal(ctx context.Context, obj any, next graphql.Resolver) (any, error) {
tokenUser := oauth2.ForContext(ctx)
if tokenUser == nil {
return nil, fmt.Errorf("Internal auth access denied")
@@ -34,7 +34,7 @@ func Internal(ctx context.Context, obj interface{}, next graphql.Resolver) (inte
}
// Private ...
-func Private(ctx context.Context, obj interface{}, next graphql.Resolver) (interface{}, error) {
+func Private(ctx context.Context, obj any, next graphql.Resolver) (any, error) {
tokenUser := oauth2.ForContext(ctx)
if tokenUser == nil {
return nil, fmt.Errorf("Private auth access denied")
@@ -53,8 +53,8 @@ func Private(ctx context.Context, obj interface{}, next graphql.Resolver) (inter
}
// Access ...
-func Access(ctx context.Context, obj interface{}, next graphql.Resolver,
- scope string, kind string) (interface{}, error) {
+func Access(ctx context.Context, obj any, next graphql.Resolver,
+ scope string, kind string) (any, error) {
tokenUser := oauth2.ForContext(ctx)
if tokenUser == nil {
diff --git a/api/graph/model/cursor.go b/api/graph/model/cursor.go
index ed571b3..644c56e 100644
--- a/api/graph/model/cursor.go
+++ b/api/graph/model/cursor.go
@@ -20,7 +20,7 @@ type Cursor struct {
Limit int
}
-func (c *Cursor) UnmarshalGQL(v interface{}) error {
+func (c *Cursor) UnmarshalGQL(v any) error {
enc, ok := v.(string)
if !ok {
return fmt.Errorf("cursor must be strings")
diff --git a/cmd/global.go b/cmd/global.go
index 1b07240..e965707 100644
--- a/cmd/global.go
+++ b/cmd/global.go
@@ -27,7 +27,7 @@ func RunMigrations(t *testing.T, db *sql.DB) {
)
engine := migrate.NewEngine(db, migrations, migrate.DOLLAR, false)
- engine.Printf = func(format string, args ...interface{}) (int, error) {
+ engine.Printf = func(format string, args ...any) (int, error) {
t.Logf(format, args...)
return 0, nil
}
diff --git a/core/routes.go b/core/routes.go
index 163f504..5e8fd53 100644
--- a/core/routes.go
+++ b/core/routes.go
@@ -2159,7 +2159,7 @@ func (s *Service) OrgLinksList(c echo.Context) error {
cloudType := model.CloudTypeLinks
if c.Path() != c.Echo().Reverse(s.RouteName("recent_link_list")) &&
c.Path() != c.Echo().Reverse(s.RouteName("recent_link_list_rss")) {
- // This means that we want to see a specific org (private or businnes)
+ // This means that we want to see a specific org (private or business)
// and not all the recent links
slug = links.PullOrgSlug(c)
op.Var("slug", slug)
diff --git a/pinboard/routes_test.go b/pinboard/routes_test.go
index b08294b..07bea5b 100644
--- a/pinboard/routes_test.go
+++ b/pinboard/routes_test.go
@@ -106,9 +106,9 @@ func TestPinboardHandlers(t *testing.T) {
defer httpmock.DeactivateAndReset()
httpmock.RegisterResponder("POST", "http://127.0.0.1:8080/query",
- httpmock.NewJsonResponderOrPanic(http.StatusOK, map[string]interface{}{
- "data": map[string]interface{}{
- "addLink": map[string]interface{}{
+ httpmock.NewJsonResponderOrPanic(http.StatusOK, map[string]any{
+ "data": map[string]any{
+ "addLink": map[string]any{
"hash": "abc123def456",
},
},
@@ -163,9 +163,9 @@ func TestPinboardHandlers(t *testing.T) {
httpmock.Activate()
defer httpmock.DeactivateAndReset()
httpmock.RegisterResponder("POST", "http://127.0.0.1:8080/query",
- httpmock.NewJsonResponderOrPanic(http.StatusOK, map[string]interface{}{
- "data": map[string]interface{}{
- "addLink": map[string]interface{}{
+ httpmock.NewJsonResponderOrPanic(http.StatusOK, map[string]any{
+ "data": map[string]any{
+ "addLink": map[string]any{
"hash": "abc123def456",
},
},
@@ -203,10 +203,10 @@ func TestPinboardHandlers(t *testing.T) {
callCount++
if callCount == 1 {
// First call: find the link
- return httpmock.NewJsonResponse(http.StatusOK, map[string]interface{}{
- "data": map[string]interface{}{
- "getOrgLinks": map[string]interface{}{
- "result": []map[string]interface{}{
+ return httpmock.NewJsonResponse(http.StatusOK, map[string]any{
+ "data": map[string]any{
+ "getOrgLinks": map[string]any{
+ "result": []map[string]any{
{
"hash": "abc123",
"url": "https://example.com",
@@ -217,9 +217,9 @@ func TestPinboardHandlers(t *testing.T) {
})
}
// Second call: delete the link
- return httpmock.NewJsonResponse(http.StatusOK, map[string]interface{}{
- "data": map[string]interface{}{
- "deleteLink": map[string]interface{}{
+ return httpmock.NewJsonResponse(http.StatusOK, map[string]any{
+ "data": map[string]any{
+ "deleteLink": map[string]any{
"success": true,
},
},
@@ -250,10 +250,10 @@ func TestPinboardHandlers(t *testing.T) {
defer httpmock.DeactivateAndReset()
httpmock.RegisterResponder("POST", "http://127.0.0.1:8080/query",
- httpmock.NewJsonResponderOrPanic(http.StatusOK, map[string]interface{}{
- "data": map[string]interface{}{
- "getOrgLinks": map[string]interface{}{
- "result": []map[string]interface{}{},
+ httpmock.NewJsonResponderOrPanic(http.StatusOK, map[string]any{
+ "data": map[string]any{
+ "getOrgLinks": map[string]any{
+ "result": []map[string]any{},
},
},
}))
@@ -281,10 +281,10 @@ func TestPinboardHandlers(t *testing.T) {
httpmock.Activate()
defer httpmock.DeactivateAndReset()
httpmock.RegisterResponder("POST", "http://127.0.0.1:8080/query",
- httpmock.NewJsonResponderOrPanic(http.StatusOK, map[string]interface{}{
- "data": map[string]interface{}{
- "getOrgLinks": map[string]interface{}{
- "result": []map[string]interface{}{
+ httpmock.NewJsonResponderOrPanic(http.StatusOK, map[string]any{
+ "data": map[string]any{
+ "getOrgLinks": map[string]any{
+ "result": []map[string]any{
{
"id": 1,
"title": "Example Title",
@@ -294,7 +294,7 @@ func TestPinboardHandlers(t *testing.T) {
"visibility": "PUBLIC",
"unread": false,
"starred": false,
- "tags": []map[string]interface{}{
+ "tags": []map[string]any{
{"name": "tag1"},
{"name": "tag2"},
},
@@ -327,10 +327,10 @@ func TestPinboardHandlers(t *testing.T) {
httpmock.Activate()
defer httpmock.DeactivateAndReset()
httpmock.RegisterResponder("POST", "http://127.0.0.1:8080/query",
- httpmock.NewJsonResponderOrPanic(http.StatusOK, map[string]interface{}{
- "data": map[string]interface{}{
- "getOrgLinks": map[string]interface{}{
- "result": []map[string]interface{}{
+ httpmock.NewJsonResponderOrPanic(http.StatusOK, map[string]any{
+ "data": map[string]any{
+ "getOrgLinks": map[string]any{
+ "result": []map[string]any{
{
"id": 1,
"title": "Example Title",
@@ -340,7 +340,7 @@ func TestPinboardHandlers(t *testing.T) {
"visibility": "PRIVATE",
"unread": true,
"starred": false,
- "tags": []map[string]interface{}{},
+ "tags": []map[string]any{},
"createdOn": "2024-01-15T10:30:00Z",
"updatedOn": "2024-01-15T10:30:00Z",
},
@@ -376,8 +376,8 @@ func TestPinboardHandlers(t *testing.T) {
body, _ := io.ReadAll(req.Body)
// Parse the GraphQL request
var gqlReq struct {
- Query string `json:"query"`
- Variables map[string]interface{} `json:"variables"`
+ Query string `json:"query"`
+ Variables map[string]any `json:"variables"`
}
if err := json.Unmarshal(body, &gqlReq); err == nil {
if limit, ok := gqlReq.Variables["limit"]; ok {
@@ -386,10 +386,10 @@ func TestPinboardHandlers(t *testing.T) {
}
}
}
- return httpmock.NewJsonResponse(http.StatusOK, map[string]interface{}{
- "data": map[string]interface{}{
- "getOrgLinks": map[string]interface{}{
- "result": []map[string]interface{}{},
+ return httpmock.NewJsonResponse(http.StatusOK, map[string]any{
+ "data": map[string]any{
+ "getOrgLinks": map[string]any{
+ "result": []map[string]any{},
},
},
})
@@ -417,8 +417,8 @@ func TestPinboardHandlers(t *testing.T) {
body, _ := io.ReadAll(req.Body)
// Parse the GraphQL request
var gqlReq struct {
- Query string `json:"query"`
- Variables map[string]interface{} `json:"variables"`
+ Query string `json:"query"`
+ Variables map[string]any `json:"variables"`
}
if err := json.Unmarshal(body, &gqlReq); err == nil {
if limit, ok := gqlReq.Variables["limit"]; ok {
@@ -427,10 +427,10 @@ func TestPinboardHandlers(t *testing.T) {
}
}
}
- return httpmock.NewJsonResponse(http.StatusOK, map[string]interface{}{
- "data": map[string]interface{}{
- "getOrgLinks": map[string]interface{}{
- "result": []map[string]interface{}{},
+ return httpmock.NewJsonResponse(http.StatusOK, map[string]any{
+ "data": map[string]any{
+ "getOrgLinks": map[string]any{
+ "result": []map[string]any{},
},
},
})
@@ -452,10 +452,10 @@ func TestPinboardHandlers(t *testing.T) {
httpmock.Activate()
defer httpmock.DeactivateAndReset()
httpmock.RegisterResponder("POST", "http://127.0.0.1:8080/query",
- httpmock.NewJsonResponderOrPanic(http.StatusOK, map[string]interface{}{
- "data": map[string]interface{}{
- "getOrgLinks": map[string]interface{}{
- "result": []map[string]interface{}{
+ httpmock.NewJsonResponderOrPanic(http.StatusOK, map[string]any{
+ "data": map[string]any{
+ "getOrgLinks": map[string]any{
+ "result": []map[string]any{
{"createdOn": "2024-01-15T10:30:00Z"},
{"createdOn": "2024-01-15T11:30:00Z"},
{"createdOn": "2024-01-14T09:00:00Z"},
@@ -487,10 +487,10 @@ func TestPinboardHandlers(t *testing.T) {
httpmock.Activate()
defer httpmock.DeactivateAndReset()
httpmock.RegisterResponder("POST", "http://127.0.0.1:8080/query",
- httpmock.NewJsonResponderOrPanic(http.StatusOK, map[string]interface{}{
- "data": map[string]interface{}{
- "getOrgLinks": map[string]interface{}{
- "result": []map[string]interface{}{
+ httpmock.NewJsonResponderOrPanic(http.StatusOK, map[string]any{
+ "data": map[string]any{
+ "getOrgLinks": map[string]any{
+ "result": []map[string]any{
{
"id": 1,
"title": "Old Link",
@@ -500,7 +500,7 @@ func TestPinboardHandlers(t *testing.T) {
"visibility": "PUBLIC",
"unread": false,
"starred": false,
- "tags": []map[string]interface{}{},
+ "tags": []map[string]any{},
"createdOn": "2024-01-10T10:30:00Z",
"updatedOn": "2024-01-10T10:30:00Z",
},
@@ -513,7 +513,7 @@ func TestPinboardHandlers(t *testing.T) {
"visibility": "PUBLIC",
"unread": false,
"starred": false,
- "tags": []map[string]interface{}{},
+ "tags": []map[string]any{},
"createdOn": "2024-01-20T10:30:00Z",
"updatedOn": "2024-01-20T10:30:00Z",
},
@@ -542,10 +542,10 @@ func TestPinboardHandlers(t *testing.T) {
httpmock.Activate()
defer httpmock.DeactivateAndReset()
httpmock.RegisterResponder("POST", "http://127.0.0.1:8080/query",
- httpmock.NewJsonResponderOrPanic(http.StatusOK, map[string]interface{}{
- "data": map[string]interface{}{
- "getOrgLinks": map[string]interface{}{
- "result": []map[string]interface{}{
+ httpmock.NewJsonResponderOrPanic(http.StatusOK, map[string]any{
+ "data": map[string]any{
+ "getOrgLinks": map[string]any{
+ "result": []map[string]any{
{
"id": 100,
"title": "My First Note",
@@ -590,9 +590,9 @@ func TestPinboardHandlers(t *testing.T) {
httpmock.Activate()
defer httpmock.DeactivateAndReset()
httpmock.RegisterResponder("POST", "http://127.0.0.1:8080/query",
- httpmock.NewJsonResponderOrPanic(http.StatusOK, map[string]interface{}{
- "data": map[string]interface{}{
- "getOrgLink": map[string]interface{}{
+ httpmock.NewJsonResponderOrPanic(http.StatusOK, map[string]any{
+ "data": map[string]any{
+ "getOrgLink": map[string]any{
"id": 100,
"title": "My First Note",
"description": "This is the full content of the note.\n\nIt has multiple paragraphs.",
@@ -626,9 +626,9 @@ func TestPinboardHandlers(t *testing.T) {
httpmock.Activate()
defer httpmock.DeactivateAndReset()
httpmock.RegisterResponder("POST", "http://127.0.0.1:8080/query",
- httpmock.NewJsonResponderOrPanic(http.StatusOK, map[string]interface{}{
- "data": map[string]interface{}{
- "getOrgLink": map[string]interface{}{
+ httpmock.NewJsonResponderOrPanic(http.StatusOK, map[string]any{
+ "data": map[string]any{
+ "getOrgLink": map[string]any{
"id": 100,
"title": "A Link",
"description": "Not a note",
@@ -690,9 +690,9 @@ func TestTagConversion(t *testing.T) {
}
}
}
- return httpmock.NewJsonResponse(http.StatusOK, map[string]interface{}{
- "data": map[string]interface{}{
- "addLink": map[string]interface{}{
+ return httpmock.NewJsonResponse(http.StatusOK, map[string]any{
+ "data": map[string]any{
+ "addLink": map[string]any{
"hash": "abc123",
},
},
@@ -727,10 +727,10 @@ func TestTagConversion(t *testing.T) {
httpmock.Activate()
defer httpmock.DeactivateAndReset()
httpmock.RegisterResponder("POST", "http://127.0.0.1:8080/query",
- httpmock.NewJsonResponderOrPanic(http.StatusOK, map[string]interface{}{
- "data": map[string]interface{}{
- "getOrgLinks": map[string]interface{}{
- "result": []map[string]interface{}{
+ httpmock.NewJsonResponderOrPanic(http.StatusOK, map[string]any{
+ "data": map[string]any{
+ "getOrgLinks": map[string]any{
+ "result": []map[string]any{
{
"id": 1,
"title": "Test",
@@ -740,7 +740,7 @@ func TestTagConversion(t *testing.T) {
"visibility": "PUBLIC",
"unread": false,
"starred": false,
- "tags": []map[string]interface{}{
+ "tags": []map[string]any{
{"name": "simple"},
{"name": "tag with spaces"},
{"name": "another"},
@@ -821,11 +821,11 @@ func TestErrorHandling(t *testing.T) {
httpmock.Activate()
defer httpmock.DeactivateAndReset()
httpmock.RegisterResponder("POST", "http://127.0.0.1:8080/query",
- httpmock.NewJsonResponderOrPanic(http.StatusOK, map[string]interface{}{
- "errors": []map[string]interface{}{
+ httpmock.NewJsonResponderOrPanic(http.StatusOK, map[string]any{
+ "errors": []map[string]any{
{
"message": "Internal server error",
- "extensions": map[string]interface{}{
+ "extensions": map[string]any{
"code": "INTERNAL_SERVER_ERROR",
},
},
@@ -871,10 +871,10 @@ func TestResponseFormats(t *testing.T) {
httpmock.Activate()
defer httpmock.DeactivateAndReset()
httpmock.RegisterResponder("POST", "http://127.0.0.1:8080/query",
- httpmock.NewJsonResponderOrPanic(http.StatusOK, map[string]interface{}{
- "data": map[string]interface{}{
- "getOrgLinks": map[string]interface{}{
- "result": []map[string]interface{}{
+ httpmock.NewJsonResponderOrPanic(http.StatusOK, map[string]any{
+ "data": map[string]any{
+ "getOrgLinks": map[string]any{
+ "result": []map[string]any{
{
"id": 1,
"title": "Test",
@@ -884,7 +884,7 @@ func TestResponseFormats(t *testing.T) {
"visibility": "PUBLIC",
"unread": false,
"starred": false,
- "tags": []map[string]interface{}{},
+ "tags": []map[string]any{},
"createdOn": "2024-01-15T10:30:00Z",
"updatedOn": "2024-01-15T10:30:00Z",
},
@@ -921,10 +921,10 @@ func TestResponseFormats(t *testing.T) {
httpmock.Activate()
defer httpmock.DeactivateAndReset()
httpmock.RegisterResponder("POST", "http://127.0.0.1:8080/query",
- httpmock.NewJsonResponderOrPanic(http.StatusOK, map[string]interface{}{
- "data": map[string]interface{}{
- "getOrgLinks": map[string]interface{}{
- "result": []map[string]interface{}{
+ httpmock.NewJsonResponderOrPanic(http.StatusOK, map[string]any{
+ "data": map[string]any{
+ "getOrgLinks": map[string]any{
+ "result": []map[string]any{
{
"id": 1,
"title": "Test",
@@ -934,7 +934,7 @@ func TestResponseFormats(t *testing.T) {
"visibility": "PUBLIC",
"unread": false,
"starred": false,
- "tags": []map[string]interface{}{},
+ "tags": []map[string]any{},
"createdOn": "2024-01-15T10:30:00Z",
"updatedOn": "2024-01-15T10:30:00Z",
},
@@ -958,16 +958,16 @@ func TestResponseFormats(t *testing.T) {
c.NoError(err)
// Parse JSON to verify structure
- var result map[string]interface{}
+ var result map[string]any
err = json.Unmarshal(recorder.Body.Bytes(), &result)
c.NoError(err)
c.Contains(result, "date")
c.Contains(result, "user")
c.Contains(result, "posts")
- posts := result["posts"].([]interface{})
+ posts := result["posts"].([]any)
c.Len(posts, 1)
- post := posts[0].(map[string]interface{})
+ post := posts[0].(map[string]any)
c.Equal("https://test.com", post["href"])
})
}
@@ -1003,8 +1003,8 @@ func TestOrganizationSelection(t *testing.T) {
func(req *http.Request) (*http.Response, error) {
body, _ := io.ReadAll(req.Body)
var gqlReq struct {
- Query string `json:"query"`
- Variables map[string]interface{} `json:"variables"`
+ Query string `json:"query"`
+ Variables map[string]any `json:"variables"`
}
if err := json.Unmarshal(body, &gqlReq); err == nil {
if orgSlug, ok := gqlReq.Variables["orgSlug"]; ok {
@@ -1013,10 +1013,10 @@ func TestOrganizationSelection(t *testing.T) {
}
}
}
- return httpmock.NewJsonResponse(http.StatusOK, map[string]interface{}{
- "data": map[string]interface{}{
- "getOrgLinks": map[string]interface{}{
- "result": []map[string]interface{}{},
+ return httpmock.NewJsonResponse(http.StatusOK, map[string]any{
+ "data": map[string]any{
+ "getOrgLinks": map[string]any{
+ "result": []map[string]any{},
},
},
})
@@ -1043,8 +1043,8 @@ func TestOrganizationSelection(t *testing.T) {
func(req *http.Request) (*http.Response, error) {
body, _ := io.ReadAll(req.Body)
var gqlReq struct {
- Query string `json:"query"`
- Variables map[string]interface{} `json:"variables"`
+ Query string `json:"query"`
+ Variables map[string]any `json:"variables"`
}
if err := json.Unmarshal(body, &gqlReq); err == nil {
if orgSlug, ok := gqlReq.Variables["orgSlug"]; ok {
@@ -1053,10 +1053,10 @@ func TestOrganizationSelection(t *testing.T) {
}
}
}
- return httpmock.NewJsonResponse(http.StatusOK, map[string]interface{}{
- "data": map[string]interface{}{
- "getOrgLinks": map[string]interface{}{
- "result": []map[string]interface{}{},
+ return httpmock.NewJsonResponse(http.StatusOK, map[string]any{
+ "data": map[string]any{
+ "getOrgLinks": map[string]any{
+ "result": []map[string]any{},
},
},
})
@@ -1065,7 +1065,7 @@ func TestOrganizationSelection(t *testing.T) {
// Create a test group with Pinboard auth middleware
authGroup := e.Group("/test")
authGroup.Use(pinboard.PinboardAuthMiddleware())
-
+
authGroup.GET("/posts/get", func(ctx echo.Context) error {
// Forward to the actual handler
return pinboardService.PostsGet(ctx)
@@ -1138,9 +1138,9 @@ func TestEdgeCases(t *testing.T) {
httpmock.Activate()
defer httpmock.DeactivateAndReset()
httpmock.RegisterResponder("POST", "http://127.0.0.1:8080/query",
- httpmock.NewJsonResponderOrPanic(http.StatusOK, map[string]interface{}{
- "data": map[string]interface{}{
- "addLink": map[string]interface{}{
+ httpmock.NewJsonResponderOrPanic(http.StatusOK, map[string]any{
+ "data": map[string]any{
+ "addLink": map[string]any{
"hash": "abc123",
},
},
@@ -1172,9 +1172,9 @@ func TestEdgeCases(t *testing.T) {
httpmock.Activate()
defer httpmock.DeactivateAndReset()
httpmock.RegisterResponder("POST", "http://127.0.0.1:8080/query",
- httpmock.NewJsonResponderOrPanic(http.StatusOK, map[string]interface{}{
- "data": map[string]interface{}{
- "addLink": map[string]interface{}{
+ httpmock.NewJsonResponderOrPanic(http.StatusOK, map[string]any{
+ "data": map[string]any{
+ "addLink": map[string]any{
"hash": "abc123",
},
},
@@ -1205,9 +1205,9 @@ func TestEdgeCases(t *testing.T) {
httpmock.Activate()
defer httpmock.DeactivateAndReset()
httpmock.RegisterResponder("POST", "http://127.0.0.1:8080/query",
- httpmock.NewJsonResponderOrPanic(http.StatusOK, map[string]interface{}{
- "data": map[string]interface{}{
- "addLink": map[string]interface{}{
+ httpmock.NewJsonResponderOrPanic(http.StatusOK, map[string]any{
+ "data": map[string]any{
+ "addLink": map[string]any{
"hash": "abc123",
},
},
@@ -1240,9 +1240,9 @@ func TestEdgeCases(t *testing.T) {
defer httpmock.DeactivateAndReset()
// Create exactly 10 links
- links := make([]map[string]interface{}, 10)
- for i := 0; i < 10; i++ {
- links[i] = map[string]interface{}{
+ links := make([]map[string]any, 10)
+ for i := range 10 {
+ links[i] = map[string]any{
"id": i,
"title": fmt.Sprintf("Link %d", i),
"description": "Test",
@@ -1251,7 +1251,7 @@ func TestEdgeCases(t *testing.T) {
"visibility": "PUBLIC",
"unread": false,
"starred": false,
- "tags": []map[string]interface{}{},
+ "tags": []map[string]any{},
"createdOn": "2024-01-15T10:30:00Z",
"updatedOn": "2024-01-15T10:30:00Z",
}
@@ -1261,13 +1261,13 @@ func TestEdgeCases(t *testing.T) {
httpmock.RegisterResponder("POST", "http://127.0.0.1:8080/query",
func(req *http.Request) (*http.Response, error) {
// Parse the GraphQL query to check the limit
- var gqlReq map[string]interface{}
+ var gqlReq map[string]any
json.NewDecoder(req.Body).Decode(&gqlReq)
// Return all links, handler will paginate
- return httpmock.NewJsonResponse(http.StatusOK, map[string]interface{}{
- "data": map[string]interface{}{
- "getOrgLinks": map[string]interface{}{
+ return httpmock.NewJsonResponse(http.StatusOK, map[string]any{
+ "data": map[string]any{
+ "getOrgLinks": map[string]any{
"result": links,
},
},
@@ -1349,10 +1349,10 @@ func TestTagEndpoints(t *testing.T) {
defer httpmock.DeactivateAndReset()
httpmock.RegisterResponder("POST", "http://127.0.0.1:8080/query",
- httpmock.NewJsonResponderOrPanic(http.StatusOK, map[string]interface{}{
- "data": map[string]interface{}{
- "getTags": map[string]interface{}{
- "result": []map[string]interface{}{
+ httpmock.NewJsonResponderOrPanic(http.StatusOK, map[string]any{
+ "data": map[string]any{
+ "getTags": map[string]any{
+ "result": []map[string]any{
{
"name": "golang",
"count": 42,
@@ -1394,10 +1394,10 @@ func TestTagEndpoints(t *testing.T) {
defer httpmock.DeactivateAndReset()
httpmock.RegisterResponder("POST", "http://127.0.0.1:8080/query",
- httpmock.NewJsonResponderOrPanic(http.StatusOK, map[string]interface{}{
- "data": map[string]interface{}{
- "getTags": map[string]interface{}{
- "result": []map[string]interface{}{
+ httpmock.NewJsonResponderOrPanic(http.StatusOK, map[string]any{
+ "data": map[string]any{
+ "getTags": map[string]any{
+ "result": []map[string]any{
{
"name": "test",
"count": 10,
@@ -1429,10 +1429,10 @@ func TestTagEndpoints(t *testing.T) {
defer httpmock.DeactivateAndReset()
httpmock.RegisterResponder("POST", "http://127.0.0.1:8080/query",
- httpmock.NewJsonResponderOrPanic(http.StatusOK, map[string]interface{}{
- "data": map[string]interface{}{
- "getTags": map[string]interface{}{
- "result": []map[string]interface{}{},
+ httpmock.NewJsonResponderOrPanic(http.StatusOK, map[string]any{
+ "data": map[string]any{
+ "getTags": map[string]any{
+ "result": []map[string]any{},
},
},
}))
@@ -1490,11 +1490,11 @@ func TestTagEndpoints(t *testing.T) {
defer httpmock.DeactivateAndReset()
httpmock.RegisterResponder("POST", "http://127.0.0.1:8080/query",
- httpmock.NewJsonResponderOrPanic(http.StatusOK, map[string]interface{}{
- "errors": []map[string]interface{}{
+ httpmock.NewJsonResponderOrPanic(http.StatusOK, map[string]any{
+ "errors": []map[string]any{
{
"message": "getTags query failed",
- "extensions": map[string]interface{}{
+ "extensions": map[string]any{
"code": "INTERNAL_SERVER_ERROR",
},
},
diff --git a/valid/valid.go b/valid/valid.go
index 0122ff4..30210d4 100644
--- a/valid/valid.go
+++ b/valid/valid.go
@@ -25,7 +25,7 @@ var (
// Validation ...
type Validation struct {
ctx context.Context
- input map[string]interface{}
+ input map[string]any
}
// ValidationError ...
@@ -39,18 +39,18 @@ func Error(ctx context.Context, field string, msg string) error {
return &gqlerror.Error{
Message: msg,
Path: graphql.GetPath(ctx),
- Extensions: map[string]interface{}{
+ Extensions: map[string]any{
"field": field,
},
}
}
// Errorf Returns a new GraphQL error attached to the given field.
-func Errorf(ctx context.Context, field string, msg string, items ...interface{}) error {
+func Errorf(ctx context.Context, field string, msg string, items ...any) error {
return &gqlerror.Error{
Message: fmt.Sprintf(msg, items...),
Path: graphql.GetPath(ctx),
- Extensions: map[string]interface{}{
+ Extensions: map[string]any{
"field": field,
},
}
@@ -64,7 +64,7 @@ func New(ctx context.Context) *Validation {
}
// WithInput Adds an input map to a validation context.
-func (valid *Validation) WithInput(input map[string]interface{}) *Validation {
+func (valid *Validation) WithInput(input map[string]any) *Validation {
valid.input = input
return valid
}
@@ -78,7 +78,7 @@ func (valid *Validation) Ok() bool {
// registered. If the field is not present, the callback is not run. Otherwise,
// the function is called with the value for the user to conduct further
// validation with.
-func (valid *Validation) Optional(name string, fn func(i interface{})) {
+func (valid *Validation) Optional(name string, fn func(i any)) {
if valid.input == nil {
panic("Attempted to validate fields without input")
}
@@ -175,8 +175,7 @@ func (valid *Validation) OptionalBool(name string, fn func(b bool)) {
}
// Creates a validation error unconditionally.
-func (valid *Validation) Error(msg string,
- items ...interface{}) *ValidationError {
+func (valid *Validation) Error(msg string, items ...any) *ValidationError {
err := &gqlerror.Error{
Path: graphql.GetPath(valid.ctx),
Message: fmt.Sprintf(msg, items...),
@@ -190,8 +189,7 @@ func (valid *Validation) Error(msg string,
// Expect Asserts that a condition is true, recording a GraphQL error with the given
// message if not.
-func (valid *Validation) Expect(cond bool,
- msg string, items ...interface{}) *ValidationError {
+func (valid *Validation) Expect(cond bool, msg string, items ...any) *ValidationError {
if cond {
return &ValidationError{valid: valid}
}
@@ -204,7 +202,7 @@ func (err *ValidationError) WithField(field string) *ValidationError {
return err
}
if err.err.Extensions == nil {
- err.err.Extensions = make(map[string]interface{})
+ err.err.Extensions = make(map[string]any)
}
err.err.Extensions["field"] = field
return err
@@ -216,7 +214,7 @@ func (err *ValidationError) WithCode(code int) *ValidationError {
return err
}
if err.err.Extensions == nil {
- err.err.Extensions = make(map[string]interface{})
+ err.err.Extensions = make(map[string]any)
}
err.err.Extensions["code"] = code
return err
@@ -225,8 +223,7 @@ func (err *ValidationError) WithCode(code int) *ValidationError {
// And Composes another assertion onto the same validation context which initially
// created an error. Short-circuiting is used, such that if the earlier
// condition failed, the new condition is not considered.
-func (err *ValidationError) And(cond bool,
- msg string, items ...interface{}) *ValidationError {
+func (err *ValidationError) And(cond bool, msg string, items ...any) *ValidationError {
if err.err != nil {
return err
}
--
2.49.1