' Licensed under the Apache License, Version 2.0 (the "License");
' you may not use this file except in compliance with the License.
' You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
' Unless required by  applicable law or agreed to in writing, software distributed under the License is distributed
' on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
' See the License for the specific language governing permissions and limitations under the License.
@startuml
class JsonRPCManager {
add_handler(name, Func)
add_notification_handler(name, Func)
rsponse handle_call(request)
JsonRPCManager instance()
}
note left: Singleton class.

class Dispatcher {
    _handlers: std::unordered_map<std::string, InternalHandler>
}

class InternalHandler {
    _func: std::variant<std::monostate, Notification, Method, PluginMethod>
}

class FunctionWrapper {
    callback: std::function
}

JsonRPCManager *-- Dispatcher
note right: Class that knows how to call each callback handler. Storage class.
Dispatcher *-- InternalHandler
InternalHandler *-- FunctionWrapper
@enduml