<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
 "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
<node>
    <!--
      This file should exercise as many aspects of the sbus_codegen as
      possible. See sbus_codegen_test.c for verification.
    -->

    <!--
      This is an interface, it will get a sbus_interface_meta struct.
      Its name will be com_planetexpress_Ship__meta, since no c symbol
      is specified.
    -->
    <interface name="com.planetexpress.Ship">
        <!-- A property -->
        <property name="Color" type="s" access="read"/>

        <!-- A method with two in and one out argument -->
        <method name="MoveUniverse">
            <!-- This is a boolean arg -->
            <arg name="smoothly" type="b" direction="in"/>
            <!-- This is an uint32 arg -->
            <arg name="speed_factor" type="u" direction="in"/>
            <!-- This is a string arg -->
            <arg name="where_we_crashed" type="s" direction="out"/>
        </method>

        <!-- A signal with one argument -->
        <signal name="BecameSentient">
            <arg name="gender" type="s"/>
        </signal>

        <!-- A method with a specific c name -->
        <method name="Crash">
            <annotation value="crash_now" name="org.freedesktop.DBus.GLib.CSymbol"/>
            <arg name="where" type="s" direction="in"/>
        </method>

        <!-- A method without a type-safe handler -->
        <method name="Land">
            <annotation name="org.freedesktop.sssd.RawHandler" value="true"/>
        </method>
    </interface>

    <!--
      Another interface. It's C name will be test_pilot, since we've overridden
      the c symbol name.
    -->
    <interface name="com.planetexpress.Pilot">
        <annotation value="test_pilot" name="org.freedesktop.DBus.GLib.CSymbol"/>

        <!-- A property -->
        <property name="FullName" type="s" access="readwrite"/>


        <!-- A simple method -->
        <method name="Blink">
            <!-- This is an uint32 arg -->
            <arg name="duration" type="u" direction="in"/>
            <!-- This is a boolean return value -->
            <arg name="crashed" type="b" direction="out"/>
        </method>

        <!-- A method with every type of basic argument, in both directions -->
        <method name="Eject">
            <arg name="byte" type="y" direction="in"/>
            <arg name="boolean" type="b" direction="in"/>
            <arg name="int16" type="n" direction="in"/>
            <arg name="uint16" type="q" direction="in"/>
            <arg name="int32" type="i" direction="in"/>
            <arg name="uint32" type="u" direction="in"/>
            <arg name="int64" type="x" direction="in"/>
            <arg name="uint64" type="t" direction="in"/>
            <arg name="double" type="d" direction="in"/>
            <arg name="string" type="s" direction="in"/>
            <arg name="object_path" type="o" direction="in"/>
            <arg name="byte_array" type="ay" direction="in"/>
            <arg name="int16_array" type="an" direction="in"/>
            <arg name="uint16_array" type="aq" direction="in"/>
            <arg name="int32_array" type="ai" direction="in"/>
            <arg name="uint32_array" type="au" direction="in"/>
            <arg name="int64_array" type="ax" direction="in"/>
            <arg name="uint64_array" type="at" direction="in"/>
            <arg name="double_array" type="ad" direction="in"/>
            <arg name="string_array" type="as" direction="in"/>
            <arg name="object_path_array" type="ao" direction="in"/>
            <arg name="byte" type="y" direction="out"/>
            <arg name="boolean" type="b" direction="out"/>
            <arg name="int16" type="n" direction="out"/>
            <arg name="uint16" type="q" direction="out"/>
            <arg name="int32" type="i" direction="out"/>
            <arg name="uint32" type="u" direction="out"/>
            <arg name="int64" type="x" direction="out"/>
            <arg name="uint64" type="t" direction="out"/>
            <arg name="double" type="d" direction="out"/>
            <arg name="string" type="s" direction="out"/>
            <arg name="object_path" type="o" direction="out"/>
            <arg name="byte_array" type="ay" direction="out"/>
            <arg name="int16_array" type="an" direction="out"/>
            <arg name="uint16_array" type="aq" direction="out"/>
            <arg name="int32_array" type="ai" direction="out"/>
            <arg name="uint32_array" type="au" direction="out"/>
            <arg name="int64_array" type="ax" direction="out"/>
            <arg name="uint64_array" type="at" direction="out"/>
            <arg name="double_array" type="ad" direction="out"/>
            <arg name="string_array" type="as" direction="out"/>
            <arg name="object_path_array" type="ao" direction="out"/>
        </method>

        <!-- Properties with every type of basic argument, so far read only -->
        <property name="byte" type="y" access="read"/>
        <property name="boolean" type="b" access="read"/>
        <property name="int16" type="n" access="read"/>
        <property name="uint16" type="q" access="read"/>
        <property name="int32" type="i" access="read"/>
        <property name="uint32" type="u" access="read"/>
        <property name="int64" type="x" access="read"/>
        <property name="uint64" type="t" access="read"/>
        <property name="double" type="d" access="read"/>
        <property name="string" type="s" access="read"/>
        <property name="object_path" type="o" access="read"/>

        <!-- Special properties to test error codes -->
        <property name="null_string" type="s" access="read"/>
        <property name="null_path" type="o" access="read"/>

        <!-- Property arrays with every type of basic argument except boolean
             which we can't do (yet) -->
        <property name="byte_array" type="ay" access="read"/>
        <property name="int16_array" type="an" access="read"/>
        <property name="uint16_array" type="aq" access="read"/>
        <property name="int32_array" type="ai" access="read"/>
        <property name="uint32_array" type="au" access="read"/>
        <property name="int64_array" type="ax" access="read"/>
        <property name="uint64_array" type="at" access="read"/>
        <property name="double_array" type="ad" access="read"/>
        <property name="string_array" type="as" access="read"/>
        <property name="object_path_array" type="ao" access="read"/>
    </interface>

    <!--
      Special property types not suitable for group automatic tests.
    -->
    <interface name="com.planetexpress.Special">
        <annotation value="test_special" name="org.freedesktop.DBus.GLib.CSymbol"/>

        <property name="array_dict_sas" type="a{sas}" access="read"/>
    </interface>

</node>
