Files
wpm/src/fetcher.go
T
2024-05-23 22:56:36 +02:00

81 lines
1.8 KiB
Go

package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
type Request struct {
Body []byte
StatusCode int
}
type Package struct {
Author string `json:"author"`
Description string `json:"description"`
URL string `json:"url"`
}
type PackageIndex struct {
Name string `json:"name"`
Repo string `json:"repo"`
Latest string `json:"latest"`
Message string `json:"message"`
}
type Message struct {
Message string `json:"message"`
}
func sendRequest(method, url string, jsonBody []byte) (Request, error) {
bodyReader := bytes.NewReader(jsonBody)
req, err := http.NewRequest(method, url, bodyReader)
if err != nil {
return Request{Body: []byte(""), StatusCode: 400}, err
}
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
return Request{Body: []byte(""), StatusCode: 400}, err
}
defer res.Body.Close()
resBody, err := ioutil.ReadAll(res.Body)
if err != nil {
return Request{Body: []byte(""), StatusCode: 400}, err
}
return Request{Body: resBody, StatusCode: res.StatusCode}, nil
}
func getPackage(packageName string) (PackageIndex, error) {
var pkgidx PackageIndex
jsonBody := []byte(fmt.Sprintf(`{"name": "%s"}`, packageName))
req, err := sendRequest(http.MethodGet, URL, jsonBody)
if err != nil {
fmt.Printf("Fetching error: %s\n", err)
}
err = json.Unmarshal(req.Body, &pkgidx)
if err != nil {
fmt.Println("Json Error: ", err)
return pkgidx, err
}
if req.StatusCode != 200 {
return pkgidx, fmt.Errorf(pkgidx.Message)
}
return pkgidx, nil
}
func getMessage(req Request) error {
var msg Message
err := json.Unmarshal(req.Body, &msg)
if err != nil {
return fmt.Errorf("JsonError: %v", err)
}
if msg.Message != "ok" {
return fmt.Errorf(msg.Message)
}
return nil
}