@@ -7,6 +7,8 @@ package kversion
7
7
import (
8
8
"bytes"
9
9
"fmt"
10
+ "regexp"
11
+ "sync"
10
12
"text/tabwriter"
11
13
12
14
"github.com/twmb/franz-go/pkg/kmsg"
@@ -29,6 +31,80 @@ type Versions struct {
29
31
k2v []int16
30
32
}
31
33
34
+ var (
35
+ reFromString * regexp.Regexp
36
+ reFromStringOnce sync.Once
37
+ )
38
+
39
+ var versions = []struct {
40
+ name string
41
+ v * Versions
42
+ }{
43
+ {"v0.8.0" , V0_8_0 ()},
44
+ {"v0.8.1" , V0_8_1 ()},
45
+ {"v0.8.2" , V0_8_2 ()},
46
+ {"v0.9.0" , V0_9_0 ()},
47
+ {"v0.10.0" , V0_10_0 ()},
48
+ {"v0.10.1" , V0_10_1 ()},
49
+ {"v0.10.2" , V0_10_2 ()},
50
+ {"v0.11.0" , V0_11_0 ()},
51
+ {"v1.0" , V1_0_0 ()},
52
+ {"v1.1" , V1_1_0 ()},
53
+ {"v2.0" , V2_0_0 ()},
54
+ {"v2.1" , V2_1_0 ()},
55
+ {"v2.2" , V2_2_0 ()},
56
+ {"v2.3" , V2_3_0 ()},
57
+ {"v2.4" , V2_4_0 ()},
58
+ {"v2.5" , V2_5_0 ()},
59
+ {"v2.6" , V2_6_0 ()},
60
+ {"v2.7" , V2_7_0 ()},
61
+ {"v2.8" , V2_8_0 ()},
62
+ {"v3.0" , V3_0_0 ()},
63
+ {"v3.1" , V3_1_0 ()},
64
+ {"v3.2" , V3_2_0 ()},
65
+ {"v3.3" , V3_3_0 ()},
66
+ {"v3.4" , V3_4_0 ()},
67
+ {"v3.5" , V3_5_0 ()},
68
+ {"v3.6" , V3_6_0 ()},
69
+ }
70
+
71
<
10000
td data-grid-cell-id="diff-a03704d5147afb793df8b763d942e84c07c88de24fa705bde0d26375e4671f0d-31-71-2" data-line-anchor="diff-a03704d5147afb793df8b763d942e84c07c88de24fa705bde0d26375e4671f0dR71" data-selected="false" role="gridcell" style="background-color:var(--diffBlob-additionLine-bgColor, var(--diffBlob-addition-bgColor-line));padding-right:24px" tabindex="-1" valign="top" class="focusable-grid-cell diff-text-cell right-side-diff-cell left-side">+ // VersionStrings returns all recognized versions, minus any patch, that can be
72
+ // used as input to FromString.
73
+ func VersionStrings () []string {
74
+ var vs []string
75
+ for _ , v := range versions {
76
+ vs = append (vs , v .name )
77
+ }
78
+ return vs
79
+ }
80
+
81
+ // FromString returns a Versions from v.
82
+ // The expected input is:
83
+ // - for v0, v0.#.# or v0.#.#.#
84
+ // - for v1, v1.# or v1.#.#
85
+ func FromString (v string ) * Versions {
86
+ reFromStringOnce .Do (func () {
87
+ // 0: entire string
88
+ // 1: v1+ match, minus patch
89
+ // 2: v0 match, minus subpatch
90
+ reFromString = regexp .MustCompile (`^(?:(v[1-9]+\.\d+)(?:\.\d+)?|(v0\.\d+\.\d+)(?:\.\d+)?)$` )
91
+ })
92
+ m := reFromString .FindStringSubmatch (v )
93
+ if m == nil {
94
+ return nil
95
+ }
96
+ v = m [1 ]
97
+ if m [2 ] != "" {
98
+ v = m [2 ]
99
+ }
100
+ for _ , v2 := range versions {
101
+ if v2 .name == v {
102
+ return v2 .v
103
+ }
104
+ }
105
+ return nil
106
+ }
107
+
32
108
// FromApiVersionsResponse returns a Versions from a kmsg.ApiVersionsResponse.
33
109
func FromApiVersionsResponse (r * kmsg.ApiVersionsResponse ) * Versions {
34
110
var v Versions
@@ -445,10 +521,7 @@ func V3_2_0() *Versions { return zkBrokerOf(max320) }
445
521
func V3_3_0 () * Versions { return zkBrokerOf (max330 ) }
446
522
func V3_4_0 () * Versions { return zkBrokerOf (max340 ) }
447
523
func V3_5_0 () * Versions { return zkBrokerOf (max350 ) }
448
-
449
- /* TODO wait for franz-go v1.16
450
524
func V3_6_0 () * Versions { return zkBrokerOf (max360 ) }
451
- */
452
525
453
526
func zkBrokerOf (lks listenerKeys ) * Versions {
454
527
return & Versions {lks .filter (zkBroker )}
0 commit comments