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 }