/
wikijson.go
62 lines (52 loc) · 2.23 KB
/
wikijson.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package ybtools
import (
"encoding/json"
"github.com/antonholmquist/jason"
)
//
// Yapperbot Tools, the internal system bits for Yapperbot and co.
// Copyright (C) 2020 Naypta
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
// SerializeToJSON takes in any serializable object and returns the serialized JSON string
func SerializeToJSON(serializable interface{}) string {
serialized, err := json.Marshal(serializable)
if err != nil {
PanicErr("Failed to serialize object, dumping what I was trying to serialize: ", serializable)
}
return string(serialized)
}
// LoadJSONFromPageID takes a pageID, then loads and deserializes the contained JSON.
// It returns the deserialised JSON in a jason.Object pointer.
func LoadJSONFromPageID(pageID string) *jason.Object {
storedJSON, err := FetchWikitext(pageID)
if err != nil {
PanicErr("Failed to fetch JSON page with ID ", pageID, " with error ", err)
}
return parseJSON(storedJSON, "Failed to parse JSON on page ID "+pageID+" with error ")
}
// LoadJSONFromPageTitle takes a title string, then loads and deserializes the contained JSON.
// It returns the deserialised JSON in a jason.Object pointer.
func LoadJSONFromPageTitle(pageTitle string) *jason.Object {
storedJSON, err := FetchWikitextFromTitle(pageTitle)
if err != nil {
PanicErr("Failed to fetch JSON page with title ", pageTitle, " with error ", err)
}
return parseJSON(storedJSON, "Failed to parse JSON on page "+pageTitle+" with error ")
}
func parseJSON(contentToParse string, errorMsg string) *jason.Object {
parsedJSON, err := jason.NewObjectFromBytes([]byte(contentToParse))
if err != nil {
PanicErr(errorMsg, err)
}
return parsedJSON
}