github.com/taubyte/tau-cli@v0.1.13-0.20240326000942-487f0d57edfc/lib/function/helpers.go (about)

     1  package functionLib
     2  
     3  import (
     4  	"github.com/taubyte/go-project-schema/functions"
     5  	"github.com/taubyte/go-project-schema/project"
     6  	structureSpec "github.com/taubyte/go-specs/structure"
     7  	"github.com/taubyte/tau-cli/common"
     8  	applicationLib "github.com/taubyte/tau-cli/lib/application"
     9  	"github.com/taubyte/utils/id"
    10  )
    11  
    12  type getter struct {
    13  	project     project.Project
    14  	application string
    15  	function    functions.Function
    16  }
    17  
    18  func get(name string) (info getter, err error) {
    19  	info.project, info.application, err = applicationLib.SelectedProjectAndApp()
    20  	if err != nil {
    21  		return
    22  	}
    23  
    24  	info.function, err = info.project.Function(name, info.application)
    25  	if err != nil {
    26  		return
    27  	}
    28  
    29  	return
    30  }
    31  
    32  func list() (project project.Project, application string, functions []string, err error) {
    33  	project, application, err = applicationLib.SelectedProjectAndApp()
    34  	if err != nil {
    35  		return
    36  	}
    37  
    38  	local, global := project.Get().Functions(application)
    39  	if len(application) > 0 {
    40  		functions = local
    41  	} else {
    42  		functions = global
    43  	}
    44  
    45  	return
    46  }
    47  
    48  func set(function *structureSpec.Function, new bool) (info getter, err error) {
    49  	info, err = get(function.Name)
    50  	if err != nil {
    51  		return
    52  	}
    53  
    54  	if new {
    55  		function.Id = id.Generate(info.project.Get().Id(), function.Name)
    56  	} else if function.Type != info.function.Get().Type() {
    57  		err = info.function.Delete("trigger", "domains")
    58  		if err != nil {
    59  			return
    60  		}
    61  
    62  		switch function.Type {
    63  		case common.FunctionTypeHttp, common.FunctionTypeHttps:
    64  			function.Protocol = ""
    65  			function.Command = ""
    66  			function.Channel = ""
    67  			function.Local = false
    68  		case common.FunctionTypeP2P, common.FunctionTypePubSub:
    69  			function.Method = ""
    70  			function.Domains = nil
    71  			function.Paths = nil
    72  			switch function.Type {
    73  			case common.FunctionTypeP2P:
    74  				function.Channel = ""
    75  			case common.FunctionTypePubSub:
    76  				function.Command = ""
    77  				function.Protocol = ""
    78  			}
    79  		}
    80  	}
    81  
    82  	err = info.function.SetWithStruct(true, function)
    83  	if err != nil {
    84  		return
    85  	}
    86  
    87  	return
    88  }