1
0
mirror of https://github.com/schollz/cowyo.git synced 2023-08-10 21:13:00 +03:00
cowyo/vendor/github.com/shurcooL/go/gddo/gddo.go
2017-10-03 14:43:55 -04:00

53 lines
1.4 KiB
Go

// Package gddo is a simple client library for accessing the godoc.org API.
//
// It provides a single utility to fetch the importers of a Go package.
package gddo
import (
"encoding/json"
"fmt"
"net/http"
)
// Client manages communication with the godoc.org API.
type Client struct {
// UserAgent is used for outbound requests to godoc.org API, if set to non-empty value.
UserAgent string
}
// GetImporters fetches the importers of Go package with specified importPath via godoc.org API.
func (c *Client) GetImporters(importPath string) (Importers, error) {
req, err := http.NewRequest("GET", "https://api.godoc.org/importers/"+importPath, nil)
if err != nil {
return Importers{}, err
}
if c.UserAgent != "" {
req.Header.Set("User-Agent", c.UserAgent)
}
resp, err := http.DefaultClient.Do(req)
if err != nil {
return Importers{}, err
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
return Importers{}, fmt.Errorf("non-200 status code: %v", resp.StatusCode)
}
var importers Importers
err = json.NewDecoder(resp.Body).Decode(&importers)
if err != nil {
return Importers{}, err
}
return importers, nil
}
// Importers contains the list of Go packages that import a given Go package.
type Importers struct {
Results []Package
}
// Package represents a Go package.
type Package struct {
Path string // Import path of the package.
Synopsis string // Synopsis of the package.
}