anchor.diff:  (define-constant +min-retry+ 30)
   (define-constant +max-expire+ 86400)
   
  +(define-condition required-argument-missing (error)
  +  ()
  +  (:report (lambda (condition stream)
  +             (format stream "One or more required arguments missing or nil."))))
  +
  +(deftype pushover-priority () `(integer ,+priority-lowest+ ,+priority-emergency+))
   
   (defun send-pushover (&key destination-key title message (token *default-app-token*) device url-title url (priority +priority-normal+) timestamp sound html callback retry expire)
     "Send a Pushover using your app's `TOKEN' to user/group identified by `DESTINATION-KEY', containing `MESSAGE'.
  
positive.code: - `CALLBACK' - an URL for messages that Pushover servers will submit a POST request to when the message was acknowledged by recipent.
  - `RETRY' - how often (in seconds) Pushover should resend the same notification. Minimum value - 30 seconds.
  - `EXPIRE' - for how many seconds the message will continue to be retried unless acknowledged beforehand. Maximum value - 86400 seconds (24 hours)."
    
    (unless (and destination-key
                 message)
      ;; TODO throw up - required parameters
      )
    (unless (and (numberp priority)       ;integerp?
                 (<= +priority-lowest+ priority +priority-emergency+))
      ;; TODO throw up - parameter error
      )
  
    ;; TODO implement
  
    ;; - verify input parameters
    ;; - limit input parameters
    ;; - 
    )
  
  
  ;;; TODO call for querying receipts
  
negative.code: 
  ;;; TODO.
  
  (defparameter *pushover-api-endpoint-url* "https://api.pushover.net/1/messages.json")
  (defparameter *default-app-token* nil)
  
  (define-constant +priority-lowest+ -2)
  (define-constant +priority-low+ -1)
  