Remove BPA from Makefile
[icn.git] / cmd / bpa-operator / vendor / k8s.io / apimachinery / pkg / util / net / port_split.go
1 /*
2 Copyright 2015 The Kubernetes Authors.
3
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
7
8     http://www.apache.org/licenses/LICENSE-2.0
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15 */
16
17 package net
18
19 import (
20         "strings"
21
22         "k8s.io/apimachinery/pkg/util/sets"
23 )
24
25 var validSchemes = sets.NewString("http", "https", "")
26
27 // SplitSchemeNamePort takes a string of the following forms:
28 //  * "<name>",                 returns "",        "<name>","",      true
29 //  * "<name>:<port>",          returns "",        "<name>","<port>",true
30 //  * "<scheme>:<name>:<port>", returns "<scheme>","<name>","<port>",true
31 //
32 // Name must be non-empty or valid will be returned false.
33 // Scheme must be "http" or "https" if specified
34 // Port is returned as a string, and it is not required to be numeric (could be
35 // used for a named port, for example).
36 func SplitSchemeNamePort(id string) (scheme, name, port string, valid bool) {
37         parts := strings.Split(id, ":")
38         switch len(parts) {
39         case 1:
40                 name = parts[0]
41         case 2:
42                 name = parts[0]
43                 port = parts[1]
44         case 3:
45                 scheme = parts[0]
46                 name = parts[1]
47                 port = parts[2]
48         default:
49                 return "", "", "", false
50         }
51
52         if len(name) > 0 && validSchemes.Has(scheme) {
53                 return scheme, name, port, true
54         } else {
55                 return "", "", "", false
56         }
57 }
58
59 // JoinSchemeNamePort returns a string that specifies the scheme, name, and port:
60 //  * "<name>"
61 //  * "<name>:<port>"
62 //  * "<scheme>:<name>:<port>"
63 // None of the parameters may contain a ':' character
64 // Name is required
65 // Scheme must be "", "http", or "https"
66 func JoinSchemeNamePort(scheme, name, port string) string {
67         if len(scheme) > 0 {
68                 // Must include three segments to specify scheme
69                 return scheme + ":" + name + ":" + port
70         }
71         if len(port) > 0 {
72                 // Must include two segments to specify port
73                 return name + ":" + port
74         }
75         // Return name alone
76         return name
77 }