//----------------------------------------------------------------------------- // ___ __ _ _ // / _ \__ _ _ __ ___ ___ / /(_)_ __ | | __ // / /_)/ _` | '__/ __|/ _ \/ / | | '_ \| |/ / // / ___/ (_| | | \__ \ __/ /__| | | | | < // \/ \__,_|_| |___/\___\____/_|_| |_|_|\_\ . // //----------------------------------------------------------------------------- // Author: Kurt Sassenrath // Module: Server // // Session manager concept. // // Copyright (c) 2023 Kurt Sassenrath. // // License TBD. //----------------------------------------------------------------------------- #ifndef session_manager_779b9fc5781fb66f #define session_manager_779b9fc5781fb66f #include #include #include namespace parselink { using boost::asio::awaitable; template concept sync_session_manager = requires(T& mgr, std::string_view sv, proto::session* s) { { mgr.create_session(sv) } -> std::same_as>; } && requires(T& mgr, proto::session* s) { { mgr.destroy_session(s) } -> std::same_as>; } && requires(T& mgr, std::string_view user_id) { { mgr.find(user_id) } -> std::same_as>; } && requires(T& mgr, proto::session_id const& sid) { { mgr.find(sid) } -> std::same_as>; }; template concept async_session_manager = requires(T& mgr, proto::session* s) { { mgr.create_session() } -> std::same_as>>; } && requires(T& mgr, proto::session* s) { { mgr.destroy_session(s) } -> std::same_as>>; } && requires(T& mgr, proto::session_id const& sid) { { mgr.find(sid) } -> std::same_as>>; }; template concept session_manager = sync_session_manager || async_session_manager; } // namespace parselink #endif // session_manager_779b9fc5781fb66f