description: >
    Implement to provide DBus service lookup features.

    Any OpenBMC implementation must provide exactly one implementation of
    xyz.openbmc_project.ObjectMapper on /xyz/openbmc_project/ObjectMapper.
methods:
    - name: GetObject
      description: >
          Obtain a dictionary of service -> implemented interface(s)
          for the given path.
      parameters:
        - name: path
          type: s # TODO: o
          description: >
            The object path for which the result should be fetched.
        - name: interfaces
          type: as
          description: >
            An array of result set constraining interfaces.
      returns:
        - name: services
          type: a{sas}
          description: >
            A dictionary of service -> implemented interface(s).
    - name: GetAncestors
      description: >
          Obtain a dictionary of ancestor -> services where ancestor is an
          ancestor of path and services is of the type returned by the
          GetObject method.
      parameters:
        - name: path
          type: s # TODO: o
          description: >
            The path for which the result should be fetched.
        - name: interfaces
          type: as
          description: >
            An array of result set constraining interfaces.
      returns:
        - name: ancestors
          type: a{sa{sas}} # TODO a{oa{sas}}
          description: >
            A dictionary of ancestor -> services.
    - name: GetSubTree
      description: >
          Obtain a dictionary of path -> services where path is in
          sutbtree and services is of the type returned by the
          GetObject method.
      parameters:
        - name: subtree
          type: s # TODO: o
          description: >
            The subtree path for which the result should be fetched.
        - name: depth
          type: i
          description: >
            The maximum subtree depth for which results should be fetched.
            For unconstrained fetches use a depth of zero.
        - name: interfaces
          type: as
          description: >
            An array of result set constraining interfaces.
      returns:
        - name: objects
          type: a{sa{sas}} # TODO a{oa{sas}}
          description: >
            A dictionary of path -> services.
    - name: GetSubTreePaths
      description: >
          Obtain an array of paths where array elements are in subtree.
      parameters:
        - name: subtree
          type: s # TODO: o
          description: >
            The subtree path for which the result should be fetched.
        - name: depth
          type: i
          description: >
            The maximum subtree depth for which results should be fetched.
            For unconstrained fetches use a depth of zero.
        - name: interfaces
          type: as
          description: >
            An array of result set constraining interfaces.
      returns:
        - name: paths
          type: as # TODO ao
          description: >
            An array of paths.

# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
