anchor.diff:          }
       member x.pause () = async { raise (NotImplementedException ()) }
       member x.resume () = async { raise (NotImplementedException ()) }
  -    member x.on () = async { raise (NotImplementedException ()) }
       member x.count () = async { raise (NotImplementedException ()) }
       member x.empty () = async { raise (NotImplementedException ()) }
  -    member x.getJob (id:string) = async { raise (NotImplementedException ()) }+    member x.getJob (id:string) = async { raise (NotImplementedException ()) }
  +
  +    //Events
  +    member x.on = 
  +        [
  +            ("completed", event.Publish)
  +            ("progress", event.Publish)
  +            ("failed", event.Publish)
  +            ("paused", event.Publish)
  +            ("resumed", event.Publish)
  +        ]
positive.code:             do! client.HashSetAsync (queue.toKey (jobId.ToString ()), job.toData ()) |> Async.awaitPlainTask
              return job 
          }
  
  and OxenEvent<'a> =
      {
  
negative.code:         _progress: int
      }
      member this.toData () =  
          let jsData = JsonConvert.SerializeObject (this.data)
          let jsOpts = JsonConvert.SerializeObject (this.opts)
          [|
              HashEntry(toValueStr "id", toValueI64 this.jobId)
              HashEntry(toValueStr "data", toValueStr jsData)
              HashEntry(toValueStr "opts", toValueStr jsOpts)
              HashEntry(toValueStr "progress", toValueI32 this._progress)
          |]
  
      member this.remove () = async { raise (NotImplementedException ()) }
      member this.progress cnt = async { raise (NotImplementedException ()) }
  
  