File: iface.go

package info (click to toggle)
golang-github-wenerme-astgo 0.0~git20230926.1b5bc38-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 612 kB
  • sloc: makefile: 16
file content (71 lines) | stat: -rw-r--r-- 1,295 bytes parent folder | download
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
70
71
package amimodels

import "errors"

type Event interface {
	EventTypeName() string
}
type Action interface {
	ActionTypeName() string
}
type HasActionID interface {
	GetActionID() string
	SetActionID(actionID string)
}
type Handler interface {
	Request(req *Request) *Response
}
type HandlerFunc func(req *Request) *Response

func (f HandlerFunc) Request(req *Request) *Response {
	return f(req)
}

type Client struct {
	Handler
}

func (cli *Client) Action(act Action, res interface{}, opts ...RequestOption) error {
	r, err := BuildRequest(act, res, opts...)
	if err != nil {
		return err
	}
	return cli.Request(r).Err()
}

type Response struct {
	Response  string // Success, Error
	ActionID  string
	Message   string
	Timestamp string // 1621260071.803488
	Headers   map[string]string
	Error     error
}

func (res *Response) Err() error {
	if res.Error != nil {
		return res.Error
	}
	if res.Response == "Error" {
		return errors.New(res.Message)
	}
	return nil
}

type Request struct {
	Action   Action
	Response *Response
}
type RequestOption func(r *Request) error

func BuildRequest(act Action, res interface{}, opts ...RequestOption) (r *Request, err error) {
	r = &Request{
		Action: act,
	}
	for _, v := range opts {
		if err = v(r); err != nil {
			return nil, err
		}
	}
	return
}