# class DBus::Type::Parser

# D-Bus type parser class¶ ↑

Helper class to parse a type signature in the protocol.

### Public Class Methods

new(signature) click to toggle source

Create a new parser for the given signature.

    # File lib/dbus/type.rb, line 127
    def initialize(signature)
      @signature = signature
      @idx = 0
    end

### Public Instance Methods

nextchar() click to toggle source

Returns the next character from the signature.

    # File lib/dbus/type.rb, line 133
    def nextchar
      c = @signature[@idx]
      @idx += 1
      c
    end

parse() click to toggle source

Parse the entire signature, return a DBus::Type object.

    # File lib/dbus/type.rb, line 168
    def parse
      @idx = 0
      ret = Array.new
      while (c = nextchar)
        ret << parse_one(c)
      end
      ret
    end

parse_one(c) click to toggle source

Parse one character c of the signature.

    # File lib/dbus/type.rb, line 140
    def parse_one(c)
      res = nil
      case c
      when ?a
        res = Type.new(ARRAY)
        c = nextchar
        raise SignatureException, "Parse error in #{@signature}" if c == nil
        child = parse_one(c)
        res << child
      when ?(
        res = Type.new(STRUCT)
        while (c = nextchar) != nil and c != ?)
          res << parse_one(c)
        end
        raise SignatureException, "Parse error in #{@signature}" if c == nil
      when ?{
        res = Type.new(DICT_ENTRY)
        while (c = nextchar) != nil and c != ?}
          res << parse_one(c)
        end
        raise SignatureException, "Parse error in #{@signature}" if c == nil
      else
        res = Type.new(c)
      end
      res
    end