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  }