github.com/ActiveState/cli@v0.0.0-20240508170324-6801f60cd051/pkg/platform/model/version_constraints.go (about)

     1  package model
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  
     7  	"github.com/ActiveState/cli/internal/multilog"
     8  	"github.com/ActiveState/cli/pkg/platform/api/buildplanner/types"
     9  	gqlModel "github.com/ActiveState/cli/pkg/platform/api/graphql/model"
    10  	"github.com/ActiveState/cli/pkg/platform/api/inventory/inventory_models"
    11  	"github.com/ActiveState/cli/pkg/platform/api/mono/mono_models"
    12  )
    13  
    14  type versionConstraints struct {
    15  	comparator string
    16  	version    string
    17  }
    18  
    19  func InventoryRequirementsToString(requirements inventory_models.Requirements) string {
    20  	if requirements == nil {
    21  		return ""
    22  	}
    23  
    24  	constraints := make([]*versionConstraints, len(requirements))
    25  	for i, req := range requirements {
    26  		constraints[i] = &versionConstraints{*req.Comparator, *req.Version}
    27  	}
    28  	return versionConstraintsToString(constraints)
    29  }
    30  
    31  func GqlReqVersionConstraintsString(requirement *gqlModel.Requirement) string {
    32  	if requirement.VersionConstraints == nil {
    33  		return ""
    34  	}
    35  
    36  	constraints := make([]*versionConstraints, len(requirement.VersionConstraints))
    37  	for i, constraint := range requirement.VersionConstraints {
    38  		constraints[i] = &versionConstraints{constraint.Comparator, constraint.Version}
    39  	}
    40  	return versionConstraintsToString(constraints)
    41  }
    42  
    43  func BuildPlannerVersionConstraintsToString(requirements []types.VersionRequirement) string {
    44  	if requirements == nil {
    45  		return ""
    46  	}
    47  
    48  	var constraints []*versionConstraints
    49  	for _, constraint := range requirements {
    50  		constraints = append(constraints, &versionConstraints{constraint[types.VersionRequirementComparatorKey], constraint[types.VersionRequirementVersionKey]})
    51  	}
    52  
    53  	return versionConstraintsToString(constraints)
    54  }
    55  
    56  func MonoConstraintsToString(monoConstraints mono_models.Constraints) string {
    57  	if monoConstraints == nil {
    58  		return ""
    59  	}
    60  
    61  	constraints := make([]*versionConstraints, len(monoConstraints))
    62  	for i, constraint := range monoConstraints {
    63  		constraints[i] = &versionConstraints{constraint.Comparator, constraint.Version}
    64  	}
    65  	return versionConstraintsToString(constraints)
    66  }
    67  
    68  func versionConstraintsToString(constraints []*versionConstraints) string {
    69  	if len(constraints) == 0 {
    70  		return ""
    71  	}
    72  
    73  	parts := []string{}
    74  	for _, req := range constraints {
    75  		if req.version == "" || req.comparator == "" {
    76  			multilog.Error("Invalid req, has empty values: %v", req)
    77  			continue
    78  		}
    79  		switch req.comparator {
    80  		case inventory_models.RequirementComparatorEq:
    81  			parts = append(parts, req.version)
    82  		case inventory_models.RequirementComparatorGt:
    83  			parts = append(parts, fmt.Sprintf(">%s", req.version))
    84  		case inventory_models.RequirementComparatorGte:
    85  			parts = append(parts, fmt.Sprintf(">=%s", req.version))
    86  		case inventory_models.RequirementComparatorLt:
    87  			parts = append(parts, fmt.Sprintf("<%s", req.version))
    88  		case inventory_models.RequirementComparatorLte:
    89  			parts = append(parts, fmt.Sprintf("<=%s", req.version))
    90  		case inventory_models.RequirementComparatorNe:
    91  			parts = append(parts, fmt.Sprintf("!%s", req.version))
    92  		}
    93  	}
    94  	return strings.Join(parts, ",")
    95  }