code: func softDefault(substitution string, mapping Mapping) (string, bool, error) {
  	sep := ":-"
  	if !strings.Contains(substitution, sep) {
  		return "", false, nil
  	}
  	name, defaultValue := partition(substitution, sep)
  	value, ok := mapping(name)
  	if !ok || value == "" {
  		return defaultValue, true, nil
  	}
  	return value, true, nil
  }
docs: // Soft default (fall back if unset or empty)