Просмотр исходного кода

Separate the obtaining of JSON into separate function

Rufus Deponian лет назад: 5
Родитель
Сommit
5d7e9b6303
1 измененных файлов с 19 добавлено и 11 удалено
  1. 19 11
      sdApi1/sdApi1.go

+ 19 - 11
sdApi1/sdApi1.go

@@ -2,10 +2,10 @@ package sdApi1
 
 import (
 	"bytes"
+	models "devel.mephi.ru/dyokunev/go-asu-models"
 	"encoding/json"
 	"fmt"
 	"net/http"
-	models "devel.mephi.ru/dyokunev/go-asu-models"
 )
 
 var (
@@ -17,9 +17,25 @@ func SetApiKey(newApiKey string) {
 }
 
 func GetUnits() (models.Units, error) {
+	var units models.Units
+	buf, err := getJSON("https://sd.mephi.ru/api/1/units.json")
+	if err != nil {
+		return nil, err
+	}
+
+	if err := json.Unmarshal(buf.Bytes(), &units); err != nil {
+		return nil, fmt.Errorf("Cannot parse: %v: \"%v\"", string(buf.Bytes()), err.Error())
+	}
+
+	units.CalculateTree()
+
+	return units, nil
+}
+
+func getJSON(url string) (*bytes.Buffer, error) {
 	client := &http.Client{}
 
-	req, _ := http.NewRequest("GET", "https://sd.mephi.ru/api/1/units.json", nil)
+	req, _ := http.NewRequest("GET", url, nil)
 	q := req.URL.Query()
 	q.Add("api_key", apiKey)
 	req.URL.RawQuery = q.Encode()
@@ -37,13 +53,5 @@ func GetUnits() (models.Units, error) {
 		return nil, err
 	}
 
-	var units models.Units
-	if err := json.Unmarshal(buf.Bytes(), &units); err != nil {
-		return nil, fmt.Errorf("Cannot parse: %v: \"%v\"", err.Error(), string(buf.Bytes()));
-	}
-
-	units.CalculateTree()
-
-	return units, nil
+	return buf, nil
 }
-