set priority to optional (was extra)
[debian/orchestra.git] / src / conductor / task_state.go
1 // task_state.go
2
3 package main
4
5 import (
6         "os"
7         "json"
8 )
9
10 type TaskState int
11
12 const (
13         TASK_INVALID            = TaskState(iota)
14         // Task is fresh and has never been sent to the client.  It can be rescheduled still.
15         TASK_QUEUED
16         // Task has been transmitted at least once
17         TASK_PENDINGRESULT
18         // Task has finished and we have received a result.
19         TASK_FINISHED
20 )
21
22 func (ts TaskState) String() (strout string) {
23         switch ts {
24         case TASK_QUEUED:
25                 strout = "QUEUED"
26         case TASK_PENDINGRESULT:
27                 strout = "PENDING"
28         case TASK_FINISHED:
29                 strout = "FINISHED"
30         default:
31                 strout = ""
32         }
33         return strout
34 }
35
36 func (ts TaskState) MarshalJSON() (out []byte, err os.Error) {
37         strout := ts.String()
38         if strout != "" {
39                 return json.Marshal(strout)
40         }
41         return nil, InvalidValueError
42 }
43
44 func (ts *TaskState) UnmarshalJSON(in []byte) (err os.Error) {
45         var statestr string
46         err = json.Unmarshal(in, &statestr)
47         if err != nil {
48                 return err
49         }
50         switch statestr {
51         case "QUEUED":
52                 *ts = TASK_QUEUED
53         case "PENDING":
54                 *ts = TASK_PENDINGRESULT
55         case "FINISHED":
56                 *ts = TASK_FINISHED
57         default:
58                 return InvalidValueError
59         }
60         return nil
61 }
62
63 func (ts TaskState) Finished() bool {
64         if ts == TASK_FINISHED {
65                 return true
66         }
67         return false
68 }