Skip to content

Commit 3a4f676

Browse files
committed
feat: use Generic
1 parent d584411 commit 3a4f676

9 files changed

+18
-28
lines changed

method_get.go

+1-3
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,5 @@ import (
88
// See https://paperswithcode-client.readthedocs.io/en/latest/api/client.html#paperswithcode.client.PapersWithCodeClient.method_list
99
func (c *Client) MethodGet(methodID string) (models.Method, error) {
1010
url := c.baseURL + "/methods/" + methodID
11-
var result models.Method
12-
err := c.sendGetRequest(url, &result)
13-
return result, err
11+
return getJson[models.Method](c, url)
1412
}

method_list.go

+1-3
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,5 @@ func (m MethodListParams) Build() string {
2525
// MethodList fetches a list of "methods" that can be used in research papers.
2626
func (c *Client) MethodList(params MethodListParams) (models.MethodList, error) {
2727
u := c.baseURL + "/methods?" + params.Build()
28-
var listResult models.MethodList
29-
err := c.sendGetRequest(u, &listResult)
30-
return listResult, err
28+
return getJson[models.MethodList](c, u)
3129
}

paper_get.go

+1-3
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,5 @@ import (
88
// PaperGet returns a single paper. Note that paperID is hyphen cased (e.g., generative-adversarial-networks).
99
func (c *Client) PaperGet(paperID string) (models.Paper, error) {
1010
paperGetURL := fmt.Sprintf("%s/papers/%s/", c.baseURL, paperID)
11-
var paperGetResult models.Paper
12-
err := c.sendGetRequest(paperGetURL, &paperGetResult)
13-
return paperGetResult, err
11+
return getJson[models.Paper](c, paperGetURL)
1412
}

paper_list.go

+1-3
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,7 @@ import (
99
// PaperList returns multiple papers.
1010
func (c *Client) PaperList(params PaperListParams) (models.PaperList, error) {
1111
papersListURL := c.baseURL + "/papers?" + params.Build()
12-
var paperListResult models.PaperList
13-
err := c.sendGetRequest(papersListURL, &paperListResult)
14-
return paperListResult, err
12+
return getJson[models.PaperList](c, papersListURL)
1513
}
1614

1715
// PaperListParams is the parameter for PaperList method.

paper_method_list.go

+1-3
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,5 @@ import (
99
// PaperMethodList returns the methods used in the given paper.
1010
func (c *Client) PaperMethodList(paperID string) (models.MethodList, error) {
1111
pURL := fmt.Sprintf("%s/papers/%s/methods", c.baseURL, url.QueryEscape(paperID))
12-
var methodList models.MethodList
13-
err := c.sendGetRequest(pURL, &methodList)
14-
return methodList, err
12+
return getJson[models.MethodList](c, pURL)
1513
}

paper_repository_list.go

+1-3
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,5 @@ import (
99
// PaperRepositoryList returns repositories related to the given paper.
1010
func (c *Client) PaperRepositoryList(paperID string) (models.RepositoryList, error) {
1111
paperURL := fmt.Sprintf("%s/papers/%s/repositories", c.baseURL, url.QueryEscape(paperID))
12-
var repoList models.RepositoryList
13-
err := c.sendGetRequest(paperURL, &repoList)
14-
return repoList, err
12+
return getJson[models.RepositoryList](c, paperURL)
1513
}

paper_result_list.go

+1-3
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,5 @@ import (
99
// PaperResultList returns the evaluation results of the paper.
1010
func (c *Client) PaperResultList(paperID string) (models.ResultList, error) {
1111
pURL := fmt.Sprintf("%s/papers/%s/results", c.baseURL, url.QueryEscape(paperID))
12-
var paperResultList models.ResultList
13-
err := c.sendGetRequest(pURL, &paperResultList)
14-
return paperResultList, err
12+
return getJson[models.ResultList](c, pURL)
1513
}

paper_task_list.go

+1-3
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,5 @@ import (
99
// PaperTaskList returns tasks (an area of research) for the given paper.
1010
func (c *Client) PaperTaskList(paperID string) (models.TaskList, error) {
1111
pURL := fmt.Sprintf("%s/papers/%s/tasks/", c.baseURL, url.QueryEscape(paperID))
12-
var taskList models.TaskList
13-
err := c.sendGetRequest(pURL, &taskList)
14-
return taskList, err
12+
return getJson[models.TaskList](c, pURL)
1513
}

send_get_request.go

+10-4
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,17 @@ package paperswithcode_go
22

33
import "encoding/json"
44

5-
func (c *Client) sendGetRequest(url string, result interface{}) error {
6-
response, err := c.httpClient.Get(url)
5+
func getJson[T any](client *Client, url string) (T, error) {
6+
var result T
7+
response, err := client.httpClient.Get(url)
8+
79
if err != nil {
8-
return err
10+
return result, err
11+
}
12+
13+
if err := json.NewDecoder(response.Body).Decode(&result); err != nil {
14+
return result, err
915
}
1016

11-
return json.NewDecoder(response.Body).Decode(result)
17+
return result, nil
1218
}

0 commit comments

Comments
 (0)