code: func (jt *Type) Schedule(priority int, time time.Time, data interface{}) (*Job, error) {
  	// Encode the data
  	encodedData, err := jt.encodeData(data)
  	if err != nil {
  		return nil, err
  	}
  	// Create and save the job
  	job := &Job{
  		data:     encodedData,
  		typ:      jt,
  		time:     time.UTC().UnixNano(),
  		retries:  jt.retries,
  		priority: priority,
  	}
  	// Set the job's status to queued and save it in the database
  	job.status = StatusQueued
  	if err := job.save(); err != nil {
  		return nil, err
  	}
  	return job, nil
  }
docs: // Schedule schedules a on-off job of the given type with the given parameters.
  // Jobs with a higher priority will be executed first. The job will not be
  // executed until after time. data is the data associated with this particular
  // job and should have the same type as the first argument to the handler for this
  // Type.