{{.Label}}:
switch timeout{{.Sfx}} :=  z.EncBasicHandle().ChanRecvTimeout; {
case timeout{{.Sfx}} == 0: // only consume available
	for {
		select {
		case b{{.Sfx}} := <-{{.Chan}}:
			{{ .Slice }} = append({{.Slice}}, b{{.Sfx}})
		default:
			break {{.Label}}
		}
	}
case timeout{{.Sfx}} > 0: // consume until timeout
	tt{{.Sfx}} := time.NewTimer(timeout{{.Sfx}})
	for {
		select {
		case b{{.Sfx}} := <-{{.Chan}}:
			{{.Slice}} = append({{.Slice}}, b{{.Sfx}})
		case <-tt{{.Sfx}}.C:
			// close(tt.C)
			break {{.Label}}
		}
	}
default: // consume until close
	for b{{.Sfx}} := range {{.Chan}} {
		{{.Slice}} = append({{.Slice}}, b{{.Sfx}})
	}
}
