# File lib/ruote/svc/participant_list.rb, line 427
    def self.read(elt)

      case elt

        when ParticipantEntry

          elt.to_a

        when Hash

          options = elt['options'] || elt.reject { |k, v|
            %w[ name regex regexp class classname ].include?(k)
          }

          name, _ = elt.find { |k, v| v == nil }
          if name
            elt.delete(name)
            options.delete(name)
          end
          name = name || elt['name']
          name = Ruote.regex_or_s(name)

          regex = name
          if name.nil?
            regex = Ruote.regex_or_s(elt['regex'] || elt['regexp'])
            regex = regex.is_a?(String) ? Regexp.new(regex) : regex
          end

          klass = (elt['classname'] || elt['class']).to_s

          [ regex, [ klass, options ] ]

        when Array

          if elt.size == 3
            [ Ruote.regex_or_s(elt[0]), [ elt[1].to_s, elt[2] ] ]
          else
            [ Ruote.regex_or_s(elt[0]), elt[1] ]
          end

        else

          raise ArgumentError.new(
            "cannot read participant out of #{elt.inspect} (#{elt.class})")
      end
    end