<tp:generic-types
  xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">

  <tp:simple-type name="Unix_Timestamp" type="u">
    <tp:docstring>An unsigned 32-bit integer representing time as the number
      of seconds elapsed since the Unix epoch
      (1970-01-01T00:00:00Z)</tp:docstring>
  </tp:simple-type>

  <tp:simple-type name="Unix_Timestamp64" type="x">
    <tp:docstring>An signed 64-bit integer representing time as the number
      of seconds elapsed since the Unix epoch
      (1970-01-01T00:00:00Z); negative for times before the epoch</tp:docstring>

    <tp:rationale>The Text interface is the only user of Unix_Timestamp so
      far, and we'd like to be Y2038 compatible in future
      interfaces.</tp:rationale>
  </tp:simple-type>

  <tp:simple-type name="DBus_Bus_Name" type="s">
    <tp:docstring>A string representing a D-Bus bus name - either a well-known
      name like "org.freedesktop.Telepathy.MissionControl" or a unique name
      like ":1.123"</tp:docstring>
  </tp:simple-type>

  <tp:simple-type name="DBus_Well_Known_Name" type="s">
    <tp:docstring>A string representing a D-Bus well-known
      name like "org.freedesktop.Telepathy.MissionControl".</tp:docstring>
  </tp:simple-type>

  <tp:simple-type name="DBus_Unique_Name" type="s">
    <tp:docstring>A string representing a D-Bus unique name, such as
      ":1.123"</tp:docstring>
  </tp:simple-type>

  <tp:simple-type name="DBus_Interface" type="s">
    <tp:docstring>An ASCII string representing a D-Bus interface - two or more
      elements separated by dots, where each element is a non-empty
      string of ASCII letters, digits and underscores, not starting with
      a digit. The maximum total length is 255 characters. For example,
      "org.freedesktop.DBus.Peer".</tp:docstring>
  </tp:simple-type>

  <tp:simple-type name="DBus_Error_Name" type="s">
    <tp:docstring>An ASCII string representing a D-Bus error. This is
      syntactically the same as a <tp:type>DBus_Interface</tp:type>, but the
      meaning is different.</tp:docstring>
  </tp:simple-type>

  <tp:simple-type name="DBus_Signature" type="s">
    <tp:docstring>A string representing a D-Bus signature
      (the 'g' type isn't used because of poor interoperability, particularly
      with dbus-glib)</tp:docstring>
  </tp:simple-type>

  <tp:struct name="DBus_Tube_Member" array-name="DBus_Tube_Member_List">
     <tp:docstring>A struct (handle, unique name) representing a participant
       in a D-Bus tube, as returned by GetDBusNames on the Tubes channel
       type, and as seen in the DBusNamesChanged signal.</tp:docstring>
     <tp:member type="u" tp:type="Contact_Handle" name="Handle"/>
     <tp:member type="s" tp:type="DBus_Unique_Name" name="Unique_Name"/>
  </tp:struct>

  <tp:simple-type name="DBus_Member" type="s">
    <tp:docstring>An ASCII string representing a D-Bus method, signal
      or property name - a non-empty string of ASCII letters, digits and
      underscores, not starting with a digit, with a maximum length of 255
      characters. For example, "Ping".</tp:docstring>
  </tp:simple-type>

  <tp:simple-type name="DBus_Qualified_Member" type="s">
    <tp:docstring>A string representing the full name of a D-Bus method,
      signal or property, consisting of a DBus_Interface, followed by
      a dot, followed by a DBus_Member. For example,
      "org.freedesktop.DBus.Peer.Ping".</tp:docstring>
  </tp:simple-type>

  <tp:mapping name="Qualified_Property_Value_Map"
    array-name="Qualified_Property_Value_Map_List">
    <tp:docstring>A mapping from strings representing D-Bus
      properties (by their namespaced names) to their values.</tp:docstring>
    <tp:member type="s" name="Key" tp:type="DBus_Qualified_Member">
      <tp:docstring>
        A D-Bus interface name, followed by a dot and a D-Bus property name.
      </tp:docstring>
    </tp:member>
    <tp:member type="v" name="Value">
      <tp:docstring>
        The value of the property.
      </tp:docstring>
    </tp:member>
  </tp:mapping>

  <tp:mapping name="String_Variant_Map" array-name="String_Variant_Map_List">
    <tp:docstring>A mapping from strings to variants representing extra
      key-value pairs.</tp:docstring>
    <tp:member type="s" name="Key"/>
    <tp:member type="v" name="Value"/>
  </tp:mapping>

  <tp:mapping name="String_String_Map">
    <tp:docstring>A mapping from strings to strings representing extra
      key-value pairs.</tp:docstring>
    <tp:member type="s" name="Key"/>
    <tp:member type="s" name="Value"/>
  </tp:mapping>

</tp:generic-types>
