github.com/johnnyeven/libtools@v0.0.0-20191126065708-61829c1adf46/courier/version_switch.go (about) 1 package courier 2 3 import ( 4 "fmt" 5 "regexp" 6 ) 7 8 var VersionSwitchKey = "X-Version" 9 var reVersionSwitch = regexp.MustCompile("@x-version\\(([a-zA-Z_]+)\\)") 10 11 type WithVersionSwitch struct { 12 XVersion string `name:"X-Version,omitempty" in:"header"` 13 } 14 15 func MetadataWithVersionSwitch(xVersion string) Metadata { 16 return Metadata{ 17 VersionSwitchKey: []string{xVersion}, 18 } 19 } 20 21 func ModifyRequestIDWithVersionSwitch(requestID string, version string) string { 22 others, _, exists := ParseVersionSwitch(requestID) 23 if exists { 24 requestID = others 25 } 26 return requestID + fmt.Sprintf("@x-version(%s)", version) 27 } 28 29 func ParseVersionSwitch(s string) (string, string, bool) { 30 version := reVersionSwitch.FindString(s) 31 if version == "" { 32 return s, version, false 33 } 34 return reVersionSwitch.ReplaceAllStringFunc(s, func(s string) string { 35 version = reVersionSwitch.FindStringSubmatch(s)[1] 36 return "" 37 }), version, true 38 }