github.com/secoba/wails/v2@v2.6.4/internal/shell/env.go (about)

     1  package shell
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  )
     7  
     8  func UpsertEnv(env []string, key string, update func(v string) string) []string {
     9  	newEnv := make([]string, len(env), len(env)+1)
    10  	found := false
    11  	for i := range env {
    12  		if strings.HasPrefix(env[i], key+"=") {
    13  			eqIndex := strings.Index(env[i], "=")
    14  			val := env[i][eqIndex+1:]
    15  			newEnv[i] = fmt.Sprintf("%s=%v", key, update(val))
    16  			found = true
    17  			continue
    18  		}
    19  		newEnv[i] = env[i]
    20  	}
    21  	if !found {
    22  		newEnv = append(newEnv, fmt.Sprintf("%s=%v", key, update("")))
    23  	}
    24  	return newEnv
    25  }
    26  
    27  func RemoveEnv(env []string, key string) []string {
    28  	newEnv := make([]string, 0, len(env))
    29  	for _, e := range env {
    30  		if strings.HasPrefix(e, key+"=") {
    31  			continue
    32  		}
    33  		newEnv = append(newEnv, e)
    34  	}
    35  	return newEnv
    36  }
    37  
    38  func SetEnv(env []string, key string, value string) []string {
    39  	return UpsertEnv(env, key, func(_ string) string { return value })
    40  }