github.com/kaisenlinux/docker@v0.0.0-20230510090727-ea55db55fac7/swarmkit/api/genericresource/string.go (about)

     1  package genericresource
     2  
     3  import (
     4  	"strconv"
     5  	"strings"
     6  
     7  	"github.com/docker/swarmkit/api"
     8  )
     9  
    10  func discreteToString(d *api.GenericResource_DiscreteResourceSpec) string {
    11  	return strconv.FormatInt(d.DiscreteResourceSpec.Value, 10)
    12  }
    13  
    14  // Kind returns the kind key as a string
    15  func Kind(res *api.GenericResource) string {
    16  	switch r := res.Resource.(type) {
    17  	case *api.GenericResource_DiscreteResourceSpec:
    18  		return r.DiscreteResourceSpec.Kind
    19  	case *api.GenericResource_NamedResourceSpec:
    20  		return r.NamedResourceSpec.Kind
    21  	}
    22  
    23  	return ""
    24  }
    25  
    26  // Value returns the value key as a string
    27  func Value(res *api.GenericResource) string {
    28  	switch res := res.Resource.(type) {
    29  	case *api.GenericResource_DiscreteResourceSpec:
    30  		return discreteToString(res)
    31  	case *api.GenericResource_NamedResourceSpec:
    32  		return res.NamedResourceSpec.Value
    33  	}
    34  
    35  	return ""
    36  }
    37  
    38  // EnvFormat returns the environment string version of the resource
    39  func EnvFormat(res []*api.GenericResource, prefix string) []string {
    40  	envs := make(map[string][]string)
    41  	for _, v := range res {
    42  		key := Kind(v)
    43  		val := Value(v)
    44  		envs[key] = append(envs[key], val)
    45  	}
    46  
    47  	env := make([]string, 0, len(res))
    48  	for k, v := range envs {
    49  		k = strings.ToUpper(prefix + "_" + k)
    50  		env = append(env, k+"="+strings.Join(v, ","))
    51  	}
    52  
    53  	return env
    54  }