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: string
            description: >
                The object path for which the result should be fetched.
          - name: interfaces
            type: array[string]
            description: >
                An array of result set constraining interfaces.
      returns:
          - name: services
            type: dict[string,array[string]]
            description: >
                A dictionary of service -> implemented interface(s).
      errors:
          - xyz.openbmc_project.Common.Error.ResourceNotFound
    - 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: string
            description: >
                The path for which the result should be fetched.
          - name: interfaces
            type: array[string]
            description: >
                An array of result set constraining interfaces.
      returns:
          - name: ancestors
            type: dict[string,dict[string,array[string]]]
            description: >
                A dictionary of ancestor -> services.
      errors:
          - xyz.openbmc_project.Common.Error.ResourceNotFound
    - 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: string
            description: >
                The subtree path for which the result should be fetched.
          - name: depth
            type: int32
            description: >
                The maximum subtree depth for which results should be fetched.
                For unconstrained fetches use a depth of zero.
          - name: interfaces
            type: array[string]
            description: >
                An array of result set constraining interfaces.
      returns:
          - name: objects
            type: dict[string,dict[string,array[string]]]
            description: >
                A dictionary of path -> services.
      errors:
          - xyz.openbmc_project.Common.Error.ResourceNotFound
    - name: GetSubTreePaths
      description: >
          Obtain an array of paths where array elements are in subtree.
      parameters:
          - name: subtree
            type: string
            description: >
                The subtree path for which the result should be fetched.
          - name: depth
            type: int32
            description: >
                The maximum subtree depth for which results should be fetched.
                For unconstrained fetches use a depth of zero.
          - name: interfaces
            type: array[string]
            description: >
                An array of result set constraining interfaces.
      returns:
          - name: paths
            type: array[string]
            description: >
                An array of paths.
      errors:
          - xyz.openbmc_project.Common.Error.ResourceNotFound
    - name: GetAssociatedSubTree
      description: >
          Same as GetSubTree, but only return the dbus paths that are an
          association endpoint on associatedPath
      parameters:
          - name: associatedPath
            type: object_path
            description: >
                The path where the associated endpoint is fetched from.
          - name: subtree
            type: object_path
            description: >
                The subtree path for which the result should be fetched.
          - name: depth
            type: int32
            description: >
                The maximum subtree depth for which results should be fetched.
                For unconstrained fetches use a depth of zero.
          - name: interfaces
            type: array[string]
            description: >
                An array of result set constraining interfaces.
      returns:
          - name: objects
            type: dict[string,dict[string,array[string]]]
            description: >
                A dictionary of path -> services.
      errors:
          - xyz.openbmc_project.Common.Error.ResourceNotFound
    - name: GetAssociatedSubTreePaths
      description: >
          Same as GetSubTreePaths, but only return the dbus paths that are an
          association endpoint on associatedPath
      parameters:
          - name: associatedPath
            type: string
            description: >
                The path where the associated endpoint is fetched from.
          - name: subtree
            type: string
            description: >
                The subtree path for which the result should be fetched.
          - name: depth
            type: int32
            description: >
                The maximum subtree depth for which results should be fetched.
                For unconstrained fetches use a depth of zero.
          - name: interfaces
            type: array[string]
            description: >
                An array of result set constraining interfaces.
      returns:
          - name: paths
            type: array[string]
            description: >
                An array of paths.
      errors:
          - xyz.openbmc_project.Common.Error.ResourceNotFound
    - name: GetAssociatedSubTreeById
      description: >
          Retrieves a dictionary of D-Bus paths -> services of associated
          endpoints with the provided identifier, filtering based on their
          association with specified endpoint interfaces.

          Implementation steps:

          1. Retrieve the subtree D-Bus paths that implement the
             "subtreeInterfaces" and have the path endpoint "id".
          2. Create an association path by concatenating the subtree path with
             "/" and "association"
             associationPath = subtreePath + "/" + "association"
          3. Call getAssociatedSubTree to get the endpoint path -> services of
             the associationPath that implements the "endpointInterfaces".
      parameters:
          - name: id
            type: string
            description: >
                The leaf name of the dbus path, uniquely identifying a specific
                component or entity within the system. For example, in the path
                `/xyz/openbmc_project/inventory/system/{ChassisId}/motherboard/{FanId}`,
                the identifiers would be {FanId}.
          - name: objectPath
            type: string
            description: >
                The object path for which the result should be fetched.
          - name: subtreeInterfaces
            type: array[string]
            description: >
                An array of interfaces used to retrieve dbus paths with the
                specified identifier.
          - name: association
            type: string
            description: >
                The endpoint association.
          - name: endpointInterfaces
            type: array[string]
            description: >
                An array of interfaces used to filter associated endpoint paths.
      returns:
          - name: objects
            type: dict[string,dict[string,array[string]]]
            description: >
                A dictionary of path -> services.
      errors:
          - xyz.openbmc_project.Common.Error.ResourceNotFound
    - name: GetAssociatedSubTreePathsById
      description: >
          Retrieves the D-Bus paths of associated endpoints with the provided
          identifier, filtering based on their association with specified
          endpoint interfaces.

          Implementation steps:

          1. Retrieve the subtree D-Bus paths that implement the
             "subtreeInterfaces" and have the path endpoint "id".
          2. Create an association path by concatenating the subtree path with
             "/" and "association"
             associationPath = subtreePath + "/" + "association"
          3. Call getAssociatedSubTreePaths to get the endpoint paths of the
             associationPath that implements the "endpointInterfaces".
      parameters:
          - name: id
            type: string
            description: >
                The leaf name of the dbus path, uniquely identifying a specific
                component or entity within the system. For example, in the path
                `/xyz/openbmc_project/inventory/system/{ChassisId}/motherboard/{FanId}`,
                the identifiers would be {FanId}.
          - name: objectPath
            type: string
            description: >
                The object path for which the result should be fetched.
          - name: subtreeInterfaces
            type: array[string]
            description: >
                An array of interfaces used to retrieve dbus paths with the
                specified identifier.
          - name: association
            type: string
            description: >
                The endpoint association.
          - name: endpointInterfaces
            type: array[string]
            description: >
                An array of interfaces used to filter associated endpoint paths.
      returns:
          - name: paths
            type: array[string]
            description: >
                An array of paths.
      errors:
          - xyz.openbmc_project.Common.Error.ResourceNotFound

service_names:
    - default: xyz.openbmc_project.ObjectMapper

paths:
    - instance: /xyz/openbmc_project/object_mapper
