             {: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`"]}
 

            :onyx/min-peers
            {:doc "The minimum number of peers that will be concurrently assigned to execute this task before it begins. If the number of peers working on this task falls below its initial count due to failure or planned departure, the choice of `:onyx/flux-policy` defines the strategy for what to do."
             :type :integer
             :restrictions ["Value must be greater than 0."
                            "`:onyx/flux-policy` must also be defined in this catalog entry."]
             :optional? true}

            :onyx/n-peers

            :onyx/group-by-key
            {:doc "The key, or vector of keys, to group incoming segments by. Keys that hash to the same value will always be sent to the same virtual peer."
             :type [:any [:any]]
             :optionally-allowed-when ["`:onyx/type` is set to `:function` or `:output`"]
             :restrictions ["Cannot be defined when `:onyx/group-by-fn` is defined."
                            "`:onyx/flux-policy` must also be defined in this catalog entry."]}

            :onyx/group-by-fn
            {:doc "A fully qualified, namespaced keyword that points to a function on the classpath. This function takes a single argument, a segment, as a parameter. The value that the function returns will be hashed. Values that hash to the same value will always be sent to the same virtual peer."
             :type :keyword
             :optionally-allowed-when ["`:onyx/type` is set to `:function` or `:output`"]
             :restrictions ["Cannot be defined when `:onyx/group-by-key` is defined."
                            "`:onyx/flux-policy` must also be defined in this catalog entry."]}

            :onyx/bulk?
            {:doc "Boolean value indicating whether the function in this catalog entry denoted by `:onyx/fn` should take a single segment, or the entire batch of segments that were read as a parameter. When set to `true`, this function's return value is ignored. The segments are identically propogated to the downstream tasks."
