description: >
    Implement to manage VPD data in system.
methods:
    - name: WriteKeyword
      description: >
          A method to update the keyword value for a given VPD record.
      parameters:
          - name: path
            type: object_path
            description: >
                Path to the D-Bus object that represents the FRU.
          - name: record
            type: string
            description: >
                Record whose keyword value needs to be modified.
          - name: keyword
            type: string
            description: >
                Keyword whose value needs to be updated.
          - name: value
            type: array[byte]
            description: >
                Value to be updated for the keyword.
      errors:
          - xyz.openbmc_project.Common.Error.InvalidArgument
          - com.ibm.VPD.Error.PathNotFound
          - com.ibm.VPD.Error.RecordNotFound
          - com.ibm.VPD.Error.KeywordNotFound

    - name: GetFRUsByUnexpandedLocationCode
      description: >
          A method to get list of FRU D-BUS object paths for a given unexpanded
          location code.
      parameters:
          - name: locationCode
            type: string
            description: >
                An un-expanded Location code.
          - name: nodeNumber
            type: uint16
            description: >
                Denotes the node in case of a multi-node configuration, ignored
                on a single node system.
      returns:
          - name: inventoryList
            type: array[object_path]
            description: >
                List of all the FRUs D-Bus object paths for the given location
                code.
      errors:
          - xyz.openbmc_project.Common.Error.InvalidArgument
          - com.ibm.VPD.Error.LocationNotFound
          - com.ibm.VPD.Error.NodeNotFound

    - name: GetFRUsByExpandedLocationCode
      description: >
          A method to get list of FRU D-BUS object paths for a given expanded
          location code.
      parameters:
          - name: locationCode
            type: string
            description: >
                Location code in expanded format.
      returns:
          - name: inventoryList
            type: array[object_path]
            description: >
                List of all the FRUs D-Bus object path for the given location
                code.
      errors:
          - xyz.openbmc_project.Common.Error.InvalidArgument
          - com.ibm.VPD.Error.LocationNotFound
          - com.ibm.VPD.Error.NodeNotFound

    - name: GetExpandedLocationCode
      description: >
          An api to get expanded location code corresponding to a given
          un-expanded location code. Expanded location codes gives the location
          of the FRU in the system.
      parameters:
          - name: locationCode
            type: string
            description: >
                Location code in un-expanded format.
          - name: nodeNumber
            type: uint16
            description: >
                Denotes the node in case of multi-node configuration. Ignored in
                case of single node configuration.
      returns:
          - name: locationCode
            type: string
            description: >
                Location code in expanded format.
      errors:
          - xyz.openbmc_project.Common.Error.InvalidArgument
          - com.ibm.VPD.Error.LocationNotFound
          - com.ibm.VPD.Error.NodeNotFound

    - name: PerformVPDRecollection
      description: >
          An api to check for FRUs replaced and if required, perform
          recollection of VPD data for them.
      errors:
          - xyz.openbmc_project.Common.Error.InvalidArgument

    - name: DeleteFRUVPD
      description: >
          An api to delete VPD of a given FRU and set its Present property as
          false on DBus. This api is to be called before requesting VPD parser
          to collect VPD of any given FRU in case of concurrent maintenance.
      parameters:
          - name: inventoryPath
            type: object_path
            description: >
                Dbus path of the FRU whose VPD needs to be removed.
      errors:
          - xyz.openbmc_project.Common.Error.InvalidArgument

    - name: CollectFRUVPD
      description: >
          An api to collect VPD of a given FRU by launching the parser exe
          asynchronously. It can be used to collect VPD of any given FRU in case
          of concurrent maintenance. As a pre-requisite for this api,
          DeleteFRUVPD api needs to be called for that particular FRU. As this
          api makes async call to the parser, caller needs to register for
          Present property change signal for that FRU on DBus to ensure
          successful execution of VPD parser for that FRU. The caller is also
          suggested to have a timer of around two mins at their end and in case
          the present property is not set to true in that timeline, can mark the
          call as failed.
      parameters:
          - name: inventoryPath
            type: object_path
            description: >
                Dbus path of the FRU whose VPD needs to be collected.
      errors:
          - xyz.openbmc_project.Common.Error.InvalidArgument
