'-------------------------------------------------------------------------------
' Copyright (c) 2022, Arm Limited and Contributors. All rights reserved.
'
' SPDX-License-Identifier: BSD-3-Clause
'
'-------------------------------------------------------------------------------

@startuml

class rpc_interface {
  +rpc_status_t {abstract}receive(call_req)
}

class service_provider {
  +void init(handlers, num_handlers)
  +void extend(service_provider)
  -rpc_status_t receive(call_req)
}

class block_storage_provider {
  +void init(block_store)
  +void regsiter_serializer(encoding, serializer)
  -rpc_status_t open_handler(call_req)
  -rpc_status_t close_handler(call_req)
  -rpc_status_t get_partition_info_handler(call_req)
  -rpc_status_t read_handler(call_req)
  -rpc_status_t write_handler(call_req)
  -rpc_status_t erase_handler(call_req)
}

class block_store {
  +int {abstract}open(client_id, uuid, *handle)
  +int {abstract}close(handle)
  +int {abstract}get_partition_info(uuid, *partition_info)
  +int {abstract}read(handle, lba, size, *buffer, *len)
  +int {abstract}write(handle, lba, *buffer, len)
  +int {abstract}erase(handle, *lba, num_blocks)
}

service_provider -up--|> rpc_interface
block_storage_provider -up--|> service_provider
block_storage_provider --> block_store
block_storage_provider --> block_storage_serializer

@enduml
