1{{.Label}}:
2switch timeout{{.Sfx}} :=  z.EncBasicHandle().ChanRecvTimeout; {
3case timeout{{.Sfx}} == 0: // only consume available
4	for {
5		select {
6		case b{{.Sfx}} := <-{{.Chan}}:
7			{{ .Slice }} = append({{.Slice}}, b{{.Sfx}})
8		default:
9			break {{.Label}}
10		}
11	}
12case timeout{{.Sfx}} > 0: // consume until timeout
13	tt{{.Sfx}} := time.NewTimer(timeout{{.Sfx}})
14	for {
15		select {
16		case b{{.Sfx}} := <-{{.Chan}}:
17			{{.Slice}} = append({{.Slice}}, b{{.Sfx}})
18		case <-tt{{.Sfx}}.C:
19			// close(tt.C)
20			break {{.Label}}
21		}
22	}
23default: // consume until close
24	for b{{.Sfx}} := range {{.Chan}} {
25		{{.Slice}} = append({{.Slice}}, b{{.Sfx}})
26	}
27}
28