module RsyncConfig

grammar RsyncSecretsFile

  rule start
    lines
    {
      def to_hash
        users = {}
        crawl users

        users
      end
    }
  end

  rule lines
    line? (EOL+ lines)?
  end

  rule line
    comment
    / user_record
    / whitespace+
  end

  rule comment
    '#' [^\n]*
  end

  rule user_record
    user:([^:]+) ':' password:([^\t\r\n\ ]+)
    {
      def action users
        users[user_value] = password_value
      end

      def user_value
        user.text_value
      end

      def password_value
        password.text_value
      end
    }
  end

  rule whitespace
    [ \t\r\n]
  end

  rule EOL
    "\r\n" / "\n"
  end

end

end