1package sarama
2
3type JoinGroupResponse struct {
4	Version       int16
5	ThrottleTime  int32
6	Err           KError
7	GenerationId  int32
8	GroupProtocol string
9	LeaderId      string
10	MemberId      string
11	Members       map[string][]byte
12}
13
14func (r *JoinGroupResponse) GetMembers() (map[string]ConsumerGroupMemberMetadata, error) {
15	members := make(map[string]ConsumerGroupMemberMetadata, len(r.Members))
16	for id, bin := range r.Members {
17		meta := new(ConsumerGroupMemberMetadata)
18		if err := decode(bin, meta); err != nil {
19			return nil, err
20		}
21		members[id] = *meta
22	}
23	return members, nil
24}
25
26func (r *JoinGroupResponse) encode(pe packetEncoder) error {
27	if r.Version >= 2 {
28		pe.putInt32(r.ThrottleTime)
29	}
30	pe.putInt16(int16(r.Err))
31	pe.putInt32(r.GenerationId)
32
33	if err := pe.putString(r.GroupProtocol); err != nil {
34		return err
35	}
36	if err := pe.putString(r.LeaderId); err != nil {
37		return err
38	}
39	if err := pe.putString(r.MemberId); err != nil {
40		return err
41	}
42
43	if err := pe.putArrayLength(len(r.Members)); err != nil {
44		return err
45	}
46
47	for memberId, memberMetadata := range r.Members {
48		if err := pe.putString(memberId); err != nil {
49			return err
50		}
51
52		if err := pe.putBytes(memberMetadata); err != nil {
53			return err
54		}
55	}
56
57	return nil
58}
59
60func (r *JoinGroupResponse) decode(pd packetDecoder, version int16) (err error) {
61	r.Version = version
62
63	if version >= 2 {
64		if r.ThrottleTime, err = pd.getInt32(); err != nil {
65			return
66		}
67	}
68
69	kerr, err := pd.getInt16()
70	if err != nil {
71		return err
72	}
73
74	r.Err = KError(kerr)
75
76	if r.GenerationId, err = pd.getInt32(); err != nil {
77		return
78	}
79
80	if r.GroupProtocol, err = pd.getString(); err != nil {
81		return
82	}
83
84	if r.LeaderId, err = pd.getString(); err != nil {
85		return
86	}
87
88	if r.MemberId, err = pd.getString(); err != nil {
89		return
90	}
91
92	n, err := pd.getArrayLength()
93	if err != nil {
94		return err
95	}
96	if n == 0 {
97		return nil
98	}
99
100	r.Members = make(map[string][]byte)
101	for i := 0; i < n; i++ {
102		memberId, err := pd.getString()
103		if err != nil {
104			return err
105		}
106
107		memberMetadata, err := pd.getBytes()
108		if err != nil {
109			return err
110		}
111
112		r.Members[memberId] = memberMetadata
113	}
114
115	return nil
116}
117
118func (r *JoinGroupResponse) key() int16 {
119	return 11
120}
121
122func (r *JoinGroupResponse) version() int16 {
123	return r.Version
124}
125
126func (r *JoinGroupResponse) headerVersion() int16 {
127	return 0
128}
129
130func (r *JoinGroupResponse) requiredVersion() KafkaVersion {
131	switch r.Version {
132	case 2:
133		return V0_11_0_0
134	case 1:
135		return V0_10_1_0
136	default:
137		return V0_9_0_0
138	}
139}
140