def _get(cmd, ids, *_args)
      # This is still in experimental and apparently the behavior was changed since 4.2.
      # We don't keep the backward-compatibility and just require the proper version here.
      requires_version(cmd, 4.2)

      params = {}

      if ids.is_a?(Hash)
        raise ArgumentError, format('Invalid parameter: %s', ids.inspect) unless ids.include?('ids') || ids.include?('names')
        params[:ids] = ids['ids'] || ids['names']
      elsif ids.is_a?(Array)
        r = ids.map { |x| x.is_a?(Integer) ? x : nil }.compact
        if r.length != ids.length
          params[:names] = ids
        else
          params[:ids] = ids
        end
      else
        if ids.is_a?(Integer)
          params[:ids] = [ids]
        else
          params[:names] = [ids]
        end
      end

      @iface.call(cmd, params)
    end
def _get(cmd, ids, *_args)
      # This is still in experimental and apparently the behavior was changed since 4.2.
      # We don't keep the backward-compatibility and just require the proper version here.
      requires_version(cmd, 4.2)

      params = {}

      if ids.is_a?(Hash)
        raise ArgumentError, format('Invalid parameter: %s', ids.inspect) unless ids.include?('ids') || ids.include?('names')
        params[:ids] = ids['ids'] || ids['names']
      elsif ids.is_a?(Array)
        r = ids.map { |x| x.is_a?(Integer) ? x : nil }.compact
        if r.length != ids.length
          params[:names] = ids
        else
          params[:ids] = ids
        end
      else
        if ids.is_a?(Integer)
          params[:ids] = [ids]
        else
          params[:names] = [ids]
        end
      end

      @iface.call(cmd, params)
    end
def _get_accessible_products