@@ -1879,11 +1879,7 @@ func (cmd *XInfoStreamFullCmd) readReply(rd *proto.Reader) error {
18791879 case "entries" :
18801880 cmd .val .Entries , err = readXMessageSlice (rd )
18811881 case "groups" :
1882- groups , err := rd .ReadReply (readStreamGroups )
1883- if err != nil {
1884- return err
1885- }
1886- cmd .val .Groups = groups .([]XInfoStreamGroup )
1882+ cmd .val .Groups , err = readStreamGroups (rd )
18871883 default :
18881884 return fmt .Errorf ("redis: unexpected content %s " +
18891885 "in XINFO STREAM reply" , key )
@@ -1895,9 +1891,13 @@ func (cmd *XInfoStreamFullCmd) readReply(rd *proto.Reader) error {
18951891 return nil
18961892}
18971893
1898- func readStreamGroups (rd * proto.Reader , n int64 ) (interface {}, error ) {
1894+ func readStreamGroups (rd * proto.Reader ) ([]XInfoStreamGroup , error ) {
1895+ n , err := rd .ReadArrayLen ()
1896+ if err != nil {
1897+ return nil , err
1898+ }
18991899 groups := make ([]XInfoStreamGroup , 0 , n )
1900- for i := int64 ( 0 ) ; i < n ; i ++ {
1900+ for i := 0 ; i < n ; i ++ {
19011901 nn , err := rd .ReadArrayLen ()
19021902 if err != nil {
19031903 return nil , err
@@ -1906,31 +1906,34 @@ func readStreamGroups(rd *proto.Reader, n int64) (interface{}, error) {
19061906 return nil , fmt .Errorf ("redis: got %d elements in XINFO STREAM FULL reply," +
19071907 "wanted 10" , nn )
19081908 }
1909- key , err := rd .ReadString ()
1910- if err != nil {
1911- return nil , err
1912- }
19131909
19141910 group := XInfoStreamGroup {}
19151911
1916- switch key {
1917- case "name" :
1918- group .Name , err = rd .ReadString ()
1919- case "last-delivered-id" :
1920- group .LastDeliveredID , err = rd .ReadString ()
1921- case "pel-count" :
1922- group .PelCount , err = rd .ReadIntReply ()
1923- case "pending" :
1924- group .Pending , err = readXInfoStreamGroupPending (rd )
1925- case "consumers" :
1926- group .Consumers , err = readXInfoStreamConsumers (rd )
1927- default :
1928- return nil , fmt .Errorf ("redis: unexpected content %s " +
1929- "in XINFO STREAM reply" , key )
1930- }
1912+ for f := 0 ; f < 5 ; f ++ {
1913+ key , err := rd .ReadString ()
1914+ if err != nil {
1915+ return nil , err
1916+ }
19311917
1932- if err != nil {
1933- return nil , err
1918+ switch key {
1919+ case "name" :
1920+ group .Name , err = rd .ReadString ()
1921+ case "last-delivered-id" :
1922+ group .LastDeliveredID , err = rd .ReadString ()
1923+ case "pel-count" :
1924+ group .PelCount , err = rd .ReadIntReply ()
1925+ case "pending" :
1926+ group .Pending , err = readXInfoStreamGroupPending (rd )
1927+ case "consumers" :
1928+ group .Consumers , err = readXInfoStreamConsumers (rd )
1929+ default :
1930+ return nil , fmt .Errorf ("redis: unexpected content %s " +
1931+ "in XINFO STREAM reply" , key )
1932+ }
1933+
1934+ if err != nil {
1935+ return nil , err
1936+ }
19341937 }
19351938
19361939 groups = append (groups , group )
@@ -2004,71 +2007,71 @@ func readXInfoStreamConsumers(rd *proto.Reader) ([]XInfoStreamConsumer, error) {
20042007 "wanted 8" , nn )
20052008 }
20062009
2007- cKey , err := rd .ReadString ()
2008- if err != nil {
2009- return nil , err
2010- }
2011-
20122010 c := XInfoStreamConsumer {}
20132011
2014- switch cKey {
2015- case "name" :
2016- c .Name , err = rd .ReadString ()
2017- case "seen-time" :
2018- seen , err := rd .ReadIntReply ()
2019- if err != nil {
2020- return nil , err
2021- }
2022- c .SeenTime = time .Unix (seen / 1000 , seen % 1000 * int64 (time .Millisecond ))
2023- case "pel-count" :
2024- c .PelCount , err = rd .ReadIntReply ()
2025- case "pending" :
2026- pendingNumber , err := rd .ReadArrayLen ()
2012+ for f := 0 ; f < 4 ; f ++ {
2013+ cKey , err := rd .ReadString ()
20272014 if err != nil {
20282015 return nil , err
20292016 }
20302017
2031- c .Pending = make ([]XInfoStreamConsumerPending , 0 , pendingNumber )
2032-
2033- for f := 0 ; f < pendingNumber ; f ++ {
2034- nn , err := rd .ReadArrayLen ()
2018+ switch cKey {
2019+ case "name" :
2020+ c .Name , err = rd .ReadString ()
2021+ case "seen-time" :
2022+ seen , err := rd .ReadIntReply ()
20352023 if err != nil {
20362024 return nil , err
20372025 }
2038- if nn != 3 {
2039- return nil , fmt .Errorf ("redis: got %d elements in XINFO STREAM reply," +
2040- "wanted 3" , nn )
2041- }
2042-
2043- p := XInfoStreamConsumerPending {}
2044-
2045- p .ID , err = rd .ReadString ()
2026+ c .SeenTime = time .Unix (seen / 1000 , seen % 1000 * int64 (time .Millisecond ))
2027+ case "pel-count" :
2028+ c .PelCount , err = rd .ReadIntReply ()
2029+ case "pending" :
2030+ pendingNumber , err := rd .ReadArrayLen ()
20462031 if err != nil {
20472032 return nil , err
20482033 }
20492034
2050- delivery , err := rd .ReadIntReply ()
2051- if err != nil {
2052- return nil , err
2053- }
2054- p .DeliveryTime = time .Unix (delivery / 1000 , delivery % 1000 * int64 (time .Millisecond ))
2035+ c .Pending = make ([]XInfoStreamConsumerPending , 0 , pendingNumber )
20552036
2056- p .DeliveryCount , err = rd .ReadIntReply ()
2057- if err != nil {
2058- return nil , err
2059- }
2037+ for f := 0 ; f < pendingNumber ; f ++ {
2038+ nn , err := rd .ReadArrayLen ()
2039+ if err != nil {
2040+ return nil , err
2041+ }
2042+ if nn != 3 {
2043+ return nil , fmt .Errorf ("redis: got %d elements in XINFO STREAM reply," +
2044+ "wanted 3" , nn )
2045+ }
20602046
2061- c .Pending = append (c .Pending , p )
2062- }
2063- default :
2064- return nil , fmt .Errorf ("redis: unexpected content %s " +
2065- "in XINFO STREAM reply" , cKey )
2066- }
2047+ p := XInfoStreamConsumerPending {}
20672048
2068- if err != nil {
2069- return nil , err
2070- }
2049+ p .ID , err = rd .ReadString ()
2050+ if err != nil {
2051+ return nil , err
2052+ }
2053+
2054+ delivery , err := rd .ReadIntReply ()
2055+ if err != nil {
2056+ return nil , err
2057+ }
2058+ p .DeliveryTime = time .Unix (delivery / 1000 , delivery % 1000 * int64 (time .Millisecond ))
2059+
2060+ p .DeliveryCount , err = rd .ReadIntReply ()
2061+ if err != nil {
2062+ return nil , err
2063+ }
20712064
2065+ c .Pending = append (c .Pending , p )
2066+ }
2067+ default :
2068+ return nil , fmt .Errorf ("redis: unexpected content %s " +
2069+ "in XINFO STREAM reply" , cKey )
2070+ }
2071+ if err != nil {
2072+ return nil , err
2073+ }
2074+ }
20722075 consumers = append (consumers , c )
20732076 }
20742077
0 commit comments