mirror of
https://gitgud.io/yats/libkiwi.git
synced 2026-06-28 06:55:34 -04:00
Refactoring n shit
This commit is contained in:
+99
@@ -0,0 +1,99 @@
|
||||
package libkiwi
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"net/url"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
type LoginResp struct {
|
||||
Status string `json:"status"`
|
||||
Message string `json:"message"`
|
||||
Redirect *url.URL `json:"redirect"`
|
||||
Visitor Visitor `json:"visitor"`
|
||||
}
|
||||
|
||||
func (lr *LoginResp) UnmarshalJSON(b []byte) error {
|
||||
var jsonMap map[string]any
|
||||
err := json.Unmarshal(b, &jsonMap)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for k, v := range jsonMap {
|
||||
switch k {
|
||||
case "status":
|
||||
lr.Status = v.(string)
|
||||
case "message":
|
||||
lr.Message = v.(string)
|
||||
case "redirect":
|
||||
u, err := url.Parse(v.(string))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
lr.Redirect = u
|
||||
case "visitor":
|
||||
vst, err := parseVisitorMap(v.(map[string]any))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
lr.Visitor = vst
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
var ErrNoXFToken = errors.New("Failed to locate xfToken on page.")
|
||||
|
||||
type Visitor struct {
|
||||
ConversationsUnread uint32 `json:"conversations_unread"`
|
||||
AlertsUnviewed uint32 `json:"alerts_unviewed"`
|
||||
TotalUnread uint32 `json:"total_unread"`
|
||||
}
|
||||
|
||||
func (vst *Visitor) UnmarshalJSON(b []byte) error {
|
||||
var jsonMap map[string]any
|
||||
err := json.Unmarshal(b, &jsonMap)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
newVst, err := parseVisitorMap(jsonMap)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
*vst = newVst
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func parseVisitorMap(jsonMap map[string]any) (Visitor, error) {
|
||||
var out Visitor
|
||||
|
||||
for k, v := range jsonMap {
|
||||
switch k {
|
||||
case "conversations_unread":
|
||||
convos, err := strconv.Atoi(v.(string))
|
||||
if err != nil {
|
||||
return out, err
|
||||
}
|
||||
out.ConversationsUnread = uint32(convos)
|
||||
case "alerts_unviewed":
|
||||
alerts, err := strconv.Atoi(v.(string))
|
||||
if err != nil {
|
||||
return out, err
|
||||
}
|
||||
out.AlertsUnviewed = uint32(alerts)
|
||||
case "total_unread":
|
||||
unread, err := strconv.Atoi(v.(string))
|
||||
if err != nil {
|
||||
return out, err
|
||||
}
|
||||
out.ConversationsUnread = uint32(unread)
|
||||
}
|
||||
}
|
||||
|
||||
return out, nil
|
||||
}
|
||||
Reference in New Issue
Block a user