             {:doc "When `:onyx/language` is set to `:clojure`, this is a fully qualified, namespaced keyword pointing to a function that takes the Event map and returns a Record implementing the Plugin interfaces. When `:onyx/language` is set to `:java`, this is a keyword pointing to a Java class that is constructed with the Event map. This class must implement the interoperability interfaces."
              :type :keyword
              :choices :any
+             :restrictions ["Namespaced keyword required unless :onyx/language :java is set, in which case a non-namespaced keyword is required."]
              :required-when ["`:onyx/type` is set to `:input`"
                              "`:onyx/type` is set to `:output`"]}
 

             :type :integer
             :restrictions ["Value must be greater than 0."
                            "`:onyx/min-peers` cannot also be defined for this catalog entry."
                            "`:onyx/max-peers` cannot also be defined for this catalog entry."
                            "`:onyx/flux-policy` must also be defined in this catalog entry."]
             :optional? true}

            :onyx/language

            {:doc "The policy that should be used when a task with grouping enabled loses a peer. Losing a peer means that the consistent hashing used to pin the same hashed values to the same peers will be altered. Using the `:kill` flux policy will kill the job. This is useful for jobs that cannot tolerate an altered hashing strategy. Using `:continue` will allow the job to continue running. With `:kill` and `:continue`, new peers will never be added to this job. The final policy is `:recover`, which is like `:continue`, but will allow peers to be added back to this job to meet the `:onyx/min-peers` number of peers working on this task concurrently."
             :type :keyword
             :choices [:kill :continue :recover]
             :restrictions ["`:onyx/min-peers` or `:onyx/n-peers` must also be defined for this catalog entry. If `:recover` is used, then `:onyx/max-peers` or `:onyx/n-peers`` must also be defined. "]
             :optionally-allowed-when ["`:onyx/type` is set to `:function` or `:output`"
                                       "`:onyx/group-by-key` or `:onyx/group-by-fn` is set."]}

            :onyx/uniqueness-key
