github.com/filecoin-project/bacalhau@v0.3.23-0.20230228154132-45c989550ace/pkg/model/v1beta1/apiversion.go (about) 1 package v1beta1 2 3 import ( 4 "encoding/json" 5 "fmt" 6 7 "github.com/filecoin-project/bacalhau/pkg/model/v1alpha1" 8 ) 9 10 //go:generate stringer -type=APIVersion 11 type APIVersion int 12 13 const ( 14 apiVersionUnknown APIVersion = iota // must be first 15 V1alpha1 16 V1beta1 17 apiVersionDone // must be last 18 ) 19 20 func APIVersionLatest() APIVersion { 21 return apiVersionDone - 1 22 } 23 24 func ParseAPIVersion(str string) (APIVersion, error) { 25 for typ := apiVersionUnknown + 1; typ < apiVersionDone; typ++ { 26 if equal(typ.String(), str) { 27 return typ, nil 28 } 29 } 30 31 return apiVersionUnknown, fmt.Errorf( 32 "unknown apiversion '%s'", str) 33 } 34 35 func APIVersionParseJob(versionString string, data string) (Job, error) { 36 version, err := ParseAPIVersion(versionString) 37 if err != nil { 38 return Job{}, err 39 } 40 if version == V1alpha1 { 41 var oldJob v1alpha1.Job 42 err := json.Unmarshal([]byte(data), &oldJob) 43 if err != nil { 44 return Job{}, fmt.Errorf("error parsing V1alpha1 Job JSON: %s", data) 45 } 46 return ConvertV1alpha1Job(oldJob), nil 47 } else if version == V1beta1 { 48 var job Job 49 err := json.Unmarshal([]byte(data), &job) 50 if err != nil { 51 return Job{}, fmt.Errorf("error parsing V1beta1 Job JSON: %s", data) 52 } 53 return job, nil 54 } 55 return Job{}, fmt.Errorf("unknown api version '%s'", version) 56 } 57 58 func APIVersionParseJobEvent(versionString string, data string) (JobEvent, error) { 59 version, err := ParseAPIVersion(versionString) 60 if err != nil { 61 return JobEvent{}, err 62 } 63 if version == V1alpha1 { 64 var oldEvent v1alpha1.JobEvent 65 err := json.Unmarshal([]byte(data), &oldEvent) 66 if err != nil { 67 return JobEvent{}, fmt.Errorf("error parsing V1alpha1 JobEvent JSON: %s %s", err.Error(), data) 68 } 69 return ConvertV1alpha1JobEvent(oldEvent), nil 70 } else if version == V1beta1 { 71 var ev JobEvent 72 err := json.Unmarshal([]byte(data), &ev) 73 if err != nil { 74 return JobEvent{}, fmt.Errorf("error parsing V1beta1 JobEvent JSON: %s %s", err.Error(), data) 75 } 76 return ev, nil 77 } 78 return JobEvent{}, fmt.Errorf("unknown api version '%s'", version) 79 } 80 81 func APIVersionParseJobLocalEvent(versionString string, data string) (JobLocalEvent, error) { 82 version, err := ParseAPIVersion(versionString) 83 if err != nil { 84 return JobLocalEvent{}, err 85 } 86 if version == V1alpha1 { 87 var oldEvent v1alpha1.JobLocalEvent 88 err := json.Unmarshal([]byte(data), &oldEvent) 89 if err != nil { 90 return JobLocalEvent{}, fmt.Errorf("error parsing V1alpha1 JobLocalEvent JSON: %s %s", err.Error(), data) 91 } 92 return ConvertV1alpha1JobLocalEvent(oldEvent), nil 93 } else if version == V1beta1 { 94 var ev JobLocalEvent 95 err := json.Unmarshal([]byte(data), &ev) 96 if err != nil { 97 return JobLocalEvent{}, fmt.Errorf("error parsing V1beta1 JobLocalEvent JSON: %s %s", err.Error(), data) 98 } 99 return ev, nil 100 } 101 return JobLocalEvent{}, fmt.Errorf("unknown api version '%s'", version) 102 } 103 104 func APIVersionParseJobState(versionString string, data string) (JobState, error) { 105 if data == "" { 106 return JobState{}, nil 107 } 108 version, err := ParseAPIVersion(versionString) 109 if err != nil { 110 return JobState{}, err 111 } 112 if version == V1alpha1 { 113 var oldEvent v1alpha1.JobState 114 err := json.Unmarshal([]byte(data), &oldEvent) 115 if err != nil { 116 return JobState{}, fmt.Errorf("error parsing V1alpha1 JobState JSON: %s", data) 117 } 118 return ConvertV1alpha1JobState(oldEvent), nil 119 } else if version == V1beta1 { 120 var ev JobState 121 err := json.Unmarshal([]byte(data), &ev) 122 if err != nil { 123 return JobState{}, fmt.Errorf("error parsing V1beta1 Job JSON: %s", data) 124 } 125 return ev, nil 126 } 127 return JobState{}, fmt.Errorf("unknown api version '%s'", version) 128 }