File: client.go

package info (click to toggle)
golang-github-mesos-mesos-go 0.0.6%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, forky, sid, trixie
  • size: 11,724 kB
  • sloc: makefile: 163
file content (71 lines) | stat: -rw-r--r-- 2,029 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 mesos

// DEPRECATED in favor of github.com/mesos/mesos-go/api/v1/lib/client

import (
	"io"

	"github.com/mesos/mesos-go/api/v1/lib/encoding"
)

// A Client represents a Mesos API client which can send Calls and return
// a streaming Decoder from which callers can read Events from, an io.Closer to
// close the event stream on graceful termination and an error in case of failure.
type Client interface {
	Do(encoding.Marshaler) (Response, error)
}

// ClientFunc is a functional adapter of the Client interface
type ClientFunc func(encoding.Marshaler) (Response, error)

// Do implements Client
func (cf ClientFunc) Do(m encoding.Marshaler) (Response, error) { return cf(m) }

// Response captures the output of a Mesos API operation. Callers are responsible for invoking
// Close when they're finished processing the response otherwise there may be connection leaks.
type Response interface {
	io.Closer
	encoding.Decoder
}

// ResponseDecorator optionally modifies the behavior of a Response
type ResponseDecorator interface {
	Decorate(Response) Response
}

// ResponseDecoratorFunc is the functional adapter for ResponseDecorator
type ResponseDecoratorFunc func(Response) Response

func (f ResponseDecoratorFunc) Decorate(r Response) Response { return f(r) }

// CloseFunc is the functional adapter for io.Closer
type CloseFunc func() error

// Close implements io.Closer
func (f CloseFunc) Close() error { return f() }

// ResponseWrapper delegates to optional overrides for invocations of Response methods.
type ResponseWrapper struct {
	Response Response
	Closer   io.Closer
	Decoder  encoding.Decoder
}

func (wrapper *ResponseWrapper) Close() error {
	if wrapper.Closer != nil {
		return wrapper.Closer.Close()
	}
	if wrapper.Response != nil {
		return wrapper.Response.Close()
	}
	return nil
}

func (wrapper *ResponseWrapper) Decode(u encoding.Unmarshaler) error {
	if wrapper.Decoder != nil {
		return wrapper.Decoder.Decode(u)
	}
	return wrapper.Response.Decode(u)
}

var _ = Response(&ResponseWrapper{})