forked from daviddengcn/gcse
/
api.go
69 lines (59 loc) · 1.26 KB
/
api.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
63
64
65
66
67
68
69
package main
import (
"encoding/json"
"unicode/utf8"
"github.com/daviddengcn/go-villa"
)
func JSon(o interface{}) []byte {
bts, _ := json.Marshal(o)
return bts
}
func FilterFunc(s string, f func(r rune) bool) string {
for i, r := range s {
if f(r) {
// first time
buf := villa.ByteSlice(s[:i])
i += utf8.RuneLen(r)
for _, r := range s[i:] {
if !f(r) {
buf.WriteRune(r)
}
}
return string(buf)
}
}
return s
}
type SearchApiHit struct {
Name string `json:"name"`
Package string `json:"package"`
Author string `json:"author"`
Synopsis string `json:"synopsis"`
Description string `json:"description"`
ProjectURL string `json:"projecturl"`
}
type SearchApiStruct struct {
Q string `json:"query"`
Hits []*SearchApiHit `json:"hits"`
}
const MAX_API_SEARCH_HITS = 100
func SearchResultToApi(q string, res *SearchResult) *SearchApiStruct {
apiRes := SearchApiStruct {
Q: q,
}
for i, hit := range res.Hits {
if i >= MAX_API_SEARCH_HITS {
break
}
apiHit := &SearchApiHit{
Name: hit.Name,
Package: hit.Package,
Author: hit.Author,
Synopsis: hit.Synopsis,
Description: hit.Description,
ProjectURL: hit.ProjectURL,
}
apiRes.Hits = append(apiRes.Hits, apiHit)
}
return &apiRes
}