// Copyright (c) ZeroC, Inc.

// slice2cpp version 3.8.1
// <auto-generated>Generated from Slice file 'Locator.ice'.</auto-generated>
// clang-format off

#ifndef Ice_Locator_h_
#define Ice_Locator_h_

#include <Ice/PushDisableWarnings.h>
#include <Ice/Ice.h>
#include "Identity.h"

#ifndef ICE_DISABLE_VERSION
#   if ICE_INT_VERSION / 100 != 308
#       error Ice version mismatch!
#   endif
#   if ICE_INT_VERSION % 100 >= 50
#       error Beta header file detected
#   endif
#   if ICE_INT_VERSION % 100 < 1
#       error Ice patch level mismatch!
#   endif
#endif

// NOLINTBEGIN(modernize-concat-nested-namespaces)

namespace Ice
{
    class LocatorRegistryPrx;

    class LocatorPrx;

    class LocatorFinderPrx;
}

namespace Ice
{
    /// Client applications use the Locator object to resolve Ice indirect proxies. This object also allows
    /// server applications to retrieve a proxy to the associated LocatorRegistryPrx object where they can register
    /// their object adapters.
    /// @remarks The Slice compiler generated this proxy class from Slice interface `::Ice::Locator`.
    /// @headerfile Ice/Ice.h
    class ICE_API LocatorPrx : public Ice::Proxy<LocatorPrx, Ice::ObjectPrx>
    {
    public:
        /// Constructs a proxy from a Communicator and a proxy string.
        /// @param communicator The communicator of the new proxy.
        /// @param proxyString The proxy string to parse.
        LocatorPrx(const Ice::CommunicatorPtr& communicator, std::string_view proxyString) : Ice::ObjectPrx{communicator, proxyString} {} // NOLINT(modernize-use-equals-default)

        /// Copy constructor. Constructs with a copy of the contents of @p other.
        /// @param other The proxy to copy from.
        LocatorPrx(const LocatorPrx& other) noexcept : Ice::ObjectPrx{other} {} // NOLINT(modernize-use-equals-default)

        /// Move constructor. Constructs a proxy with the contents of @p other using move semantics.
        /// @param other The proxy to move from.
        LocatorPrx(LocatorPrx&& other) noexcept : Ice::ObjectPrx{std::move(other)} {} // NOLINT(modernize-use-equals-default)

        ~LocatorPrx() override;

        /// Copy assignment operator. Replaces the contents of this proxy with a copy of the contents of @p rhs.
        /// @param rhs The proxy to copy from.
        /// @return A reference to this proxy.
        LocatorPrx& operator=(const LocatorPrx& rhs) noexcept
        {
            if (this != &rhs)
            {
                Ice::ObjectPrx::operator=(rhs);
            }
            return *this;
        }

        /// Move assignment operator. Replaces the contents of this proxy with the contents of @p rhs using move semantics.
        /// @param rhs The proxy to move from.
        LocatorPrx& operator=(LocatorPrx&& rhs) noexcept
        {
            if (this != &rhs)
            {
                Ice::ObjectPrx::operator=(std::move(rhs));
            }
            return *this;
        }

        /// Finds an object by identity and returns a dummy proxy with the endpoint(s) that can be used to reach this
        /// object. This dummy proxy may be an indirect proxy that requires further resolution using
        /// ::Ice::LocatorPrx::findAdapterById.
        /// @param id The identity.
        /// @param context The request context.
        /// @return A dummy proxy, or null if an object with the requested identity was not found.
        /// @throws Ice::ObjectNotFoundException Thrown when an object with the requested identity was not found. The caller
        /// should treat this exception like a null return value.
        std::optional<Ice::ObjectPrx> findObjectById(const Identity& id, const Ice::Context& context = Ice::noExplicitContext) const; // NOLINT(modernize-use-nodiscard)

        /// Finds an object by identity and returns a dummy proxy with the endpoint(s) that can be used to reach this
        /// object. This dummy proxy may be an indirect proxy that requires further resolution using
        /// ::Ice::LocatorPrx::findAdapterById.
        /// @param id The identity.
        /// @param context The request context.
        /// @return A future that becomes available when the invocation completes. This future holds:
        /// - A dummy proxy, or null if an object with the requested identity was not found.
        [[nodiscard]] std::future<std::optional<Ice::ObjectPrx>> findObjectByIdAsync(const Identity& id, const Ice::Context& context = Ice::noExplicitContext) const;

        /// Finds an object by identity and returns a dummy proxy with the endpoint(s) that can be used to reach this
        /// object. This dummy proxy may be an indirect proxy that requires further resolution using
        /// ::Ice::LocatorPrx::findAdapterById.
        /// @param id The identity.
        /// @param response The response callback. It accepts:
        /// - A dummy proxy, or null if an object with the requested identity was not found.
        /// @param exception The exception callback.
        /// @param sent The sent callback.
        /// @param context The request context.
        /// @return A function that can be called to cancel the invocation locally.
        // NOLINTNEXTLINE(modernize-use-nodiscard)
        std::function<void()> findObjectByIdAsync(const Identity& id, std::function<void(std::optional<Ice::ObjectPrx>)> response, std::function<void(std::exception_ptr)> exception = nullptr, std::function<void(bool)> sent = nullptr, const Ice::Context& context = Ice::noExplicitContext) const;

        /// @private
        void _iceI_findObjectById(const std::shared_ptr<IceInternal::OutgoingAsyncT<std::optional<Ice::ObjectPrx>>>&, const Identity&, const Ice::Context&) const;

        /// Finds an object adapter by adapter ID and returns a dummy proxy with the object adapter's endpoint(s).
        /// @param id The adapter ID.
        /// @param context The request context.
        /// @return A dummy proxy with the adapter's endpoints, or null if an object adapter with @p id was not found.
        /// @throws Ice::AdapterNotFoundException Thrown when an object adapter with this adapter ID was not found. The
        /// caller should treat this exception like a null return value.
        std::optional<Ice::ObjectPrx> findAdapterById(std::string_view id, const Ice::Context& context = Ice::noExplicitContext) const; // NOLINT(modernize-use-nodiscard)

        /// Finds an object adapter by adapter ID and returns a dummy proxy with the object adapter's endpoint(s).
        /// @param id The adapter ID.
        /// @param context The request context.
        /// @return A future that becomes available when the invocation completes. This future holds:
        /// - A dummy proxy with the adapter's endpoints, or null if an object adapter with @p id was not found.
        [[nodiscard]] std::future<std::optional<Ice::ObjectPrx>> findAdapterByIdAsync(std::string_view id, const Ice::Context& context = Ice::noExplicitContext) const;

        /// Finds an object adapter by adapter ID and returns a dummy proxy with the object adapter's endpoint(s).
        /// @param id The adapter ID.
        /// @param response The response callback. It accepts:
        /// - A dummy proxy with the adapter's endpoints, or null if an object adapter with @p id was not found.
        /// @param exception The exception callback.
        /// @param sent The sent callback.
        /// @param context The request context.
        /// @return A function that can be called to cancel the invocation locally.
        // NOLINTNEXTLINE(modernize-use-nodiscard)
        std::function<void()> findAdapterByIdAsync(std::string_view id, std::function<void(std::optional<Ice::ObjectPrx>)> response, std::function<void(std::exception_ptr)> exception = nullptr, std::function<void(bool)> sent = nullptr, const Ice::Context& context = Ice::noExplicitContext) const;

        /// @private
        void _iceI_findAdapterById(const std::shared_ptr<IceInternal::OutgoingAsyncT<std::optional<Ice::ObjectPrx>>>&, std::string_view, const Ice::Context&) const;

        /// Gets a proxy to the locator registry.
        /// @param context The request context.
        /// @return A proxy to the locator registry, or null if this locator has no associated registry.
        std::optional<LocatorRegistryPrx> getRegistry(const Ice::Context& context = Ice::noExplicitContext) const; // NOLINT(modernize-use-nodiscard)

        /// Gets a proxy to the locator registry.
        /// @param context The request context.
        /// @return A future that becomes available when the invocation completes. This future holds:
        /// - A proxy to the locator registry, or null if this locator has no associated registry.
        [[nodiscard]] std::future<std::optional<LocatorRegistryPrx>> getRegistryAsync(const Ice::Context& context = Ice::noExplicitContext) const;

        /// Gets a proxy to the locator registry.
        /// @param response The response callback. It accepts:
        /// - A proxy to the locator registry, or null if this locator has no associated registry.
        /// @param exception The exception callback.
        /// @param sent The sent callback.
        /// @param context The request context.
        /// @return A function that can be called to cancel the invocation locally.
        // NOLINTNEXTLINE(modernize-use-nodiscard)
        std::function<void()> getRegistryAsync(std::function<void(std::optional<::Ice::LocatorRegistryPrx>)> response, std::function<void(std::exception_ptr)> exception = nullptr, std::function<void(bool)> sent = nullptr, const Ice::Context& context = Ice::noExplicitContext) const;

        /// @private
        void _iceI_getRegistry(const std::shared_ptr<IceInternal::OutgoingAsyncT<std::optional<LocatorRegistryPrx>>>&, const Ice::Context&) const;

        /// Gets the type ID of the associated Slice interface.
        /// @return The string `"::Ice::Locator"`.
        static const char* ice_staticId() noexcept;

        /// @private
        static LocatorPrx _fromReference(IceInternal::ReferencePtr ref) { return LocatorPrx{std::move(ref)}; }

    protected:
        /// @private
        LocatorPrx() = default;

        /// @private
        explicit LocatorPrx(IceInternal::ReferencePtr&& ref) : Ice::ObjectPrx{std::move(ref)}
        {
        }
    };

    /// Provides access to a LocatorPrx object via a fixed identity.
    /// A LocatorFinder is always registered with identity `Ice/LocatorFinder`. This allows clients to obtain the
    /// associated Locator proxy with just the endpoint information of the object. For example, you can use the
    /// LocatorFinder proxy `Ice/LocatorFinder:tcp -h somehost -p 4061` to get the Locator proxy
    /// `MyIceGrid/Locator:tcp -h somehost -p 4061`.
    /// @remarks The Slice compiler generated this proxy class from Slice interface `::Ice::LocatorFinder`.
    /// @headerfile Ice/Ice.h
    class ICE_API LocatorFinderPrx : public Ice::Proxy<LocatorFinderPrx, Ice::ObjectPrx>
    {
    public:
        /// Constructs a proxy from a Communicator and a proxy string.
        /// @param communicator The communicator of the new proxy.
        /// @param proxyString The proxy string to parse.
        LocatorFinderPrx(const Ice::CommunicatorPtr& communicator, std::string_view proxyString) : Ice::ObjectPrx{communicator, proxyString} {} // NOLINT(modernize-use-equals-default)

        /// Copy constructor. Constructs with a copy of the contents of @p other.
        /// @param other The proxy to copy from.
        LocatorFinderPrx(const LocatorFinderPrx& other) noexcept : Ice::ObjectPrx{other} {} // NOLINT(modernize-use-equals-default)

        /// Move constructor. Constructs a proxy with the contents of @p other using move semantics.
        /// @param other The proxy to move from.
        LocatorFinderPrx(LocatorFinderPrx&& other) noexcept : Ice::ObjectPrx{std::move(other)} {} // NOLINT(modernize-use-equals-default)

        ~LocatorFinderPrx() override;

        /// Copy assignment operator. Replaces the contents of this proxy with a copy of the contents of @p rhs.
        /// @param rhs The proxy to copy from.
        /// @return A reference to this proxy.
        LocatorFinderPrx& operator=(const LocatorFinderPrx& rhs) noexcept
        {
            if (this != &rhs)
            {
                Ice::ObjectPrx::operator=(rhs);
            }
            return *this;
        }

        /// Move assignment operator. Replaces the contents of this proxy with the contents of @p rhs using move semantics.
        /// @param rhs The proxy to move from.
        LocatorFinderPrx& operator=(LocatorFinderPrx&& rhs) noexcept
        {
            if (this != &rhs)
            {
                Ice::ObjectPrx::operator=(std::move(rhs));
            }
            return *this;
        }

        /// Gets a proxy to the associated ::Ice::LocatorPrx. The proxy might point to several replicas.
        /// @param context The request context.
        /// @return The locator proxy. This proxy is never null.
        std::optional<LocatorPrx> getLocator(const Ice::Context& context = Ice::noExplicitContext) const; // NOLINT(modernize-use-nodiscard)

        /// Gets a proxy to the associated ::Ice::LocatorPrx. The proxy might point to several replicas.
        /// @param context The request context.
        /// @return A future that becomes available when the invocation completes. This future holds:
        /// - The locator proxy. This proxy is never null.
        [[nodiscard]] std::future<std::optional<LocatorPrx>> getLocatorAsync(const Ice::Context& context = Ice::noExplicitContext) const;

        /// Gets a proxy to the associated ::Ice::LocatorPrx. The proxy might point to several replicas.
        /// @param response The response callback. It accepts:
        /// - The locator proxy. This proxy is never null.
        /// @param exception The exception callback.
        /// @param sent The sent callback.
        /// @param context The request context.
        /// @return A function that can be called to cancel the invocation locally.
        // NOLINTNEXTLINE(modernize-use-nodiscard)
        std::function<void()> getLocatorAsync(std::function<void(std::optional<::Ice::LocatorPrx>)> response, std::function<void(std::exception_ptr)> exception = nullptr, std::function<void(bool)> sent = nullptr, const Ice::Context& context = Ice::noExplicitContext) const;

        /// @private
        void _iceI_getLocator(const std::shared_ptr<IceInternal::OutgoingAsyncT<std::optional<LocatorPrx>>>&, const Ice::Context&) const;

        /// Gets the type ID of the associated Slice interface.
        /// @return The string `"::Ice::LocatorFinder"`.
        static const char* ice_staticId() noexcept;

        /// @private
        static LocatorFinderPrx _fromReference(IceInternal::ReferencePtr ref) { return LocatorFinderPrx{std::move(ref)}; }

    protected:
        /// @private
        LocatorFinderPrx() = default;

        /// @private
        explicit LocatorFinderPrx(IceInternal::ReferencePtr&& ref) : Ice::ObjectPrx{std::move(ref)}
        {
        }
    };
}

namespace Ice
{
    /// The exception that is thrown by a LocatorPrx implementation when it cannot find an object adapter with the
    /// provided adapter ID.
    /// @remarks The Slice compiler generated this exception class from Slice exception `::Ice::AdapterNotFoundException`.
    /// @headerfile Ice/Ice.h
    class ICE_API AdapterNotFoundException : public Ice::UserException
    {
    public:
        /// Gets the type ID of the associated Slice exception.
        /// @return The string `"::Ice::AdapterNotFoundException"`.
        static const char* ice_staticId() noexcept;

        [[nodiscard]] const char* ice_id() const noexcept override;

        void ice_throw() const override;

    protected:
        /// @private
        void _writeImpl(Ice::OutputStream*) const override;

        /// @private
        void _readImpl(Ice::InputStream*) override;
    };

    /// The exception that is thrown by a LocatorPrx implementation when it cannot find an object with the provided
    /// identity.
    /// @remarks The Slice compiler generated this exception class from Slice exception `::Ice::ObjectNotFoundException`.
    /// @headerfile Ice/Ice.h
    class ICE_API ObjectNotFoundException : public Ice::UserException
    {
    public:
        /// Gets the type ID of the associated Slice exception.
        /// @return The string `"::Ice::ObjectNotFoundException"`.
        static const char* ice_staticId() noexcept;

        [[nodiscard]] const char* ice_id() const noexcept override;

        void ice_throw() const override;

    protected:
        /// @private
        void _writeImpl(Ice::OutputStream*) const override;

        /// @private
        void _readImpl(Ice::InputStream*) override;
    };
}

namespace Ice
{
    /// Client applications use the Locator object to resolve Ice indirect proxies. This object also allows
    /// server applications to retrieve a proxy to the associated LocatorRegistryPrx object where they can register
    /// their object adapters.
    /// @remarks The Slice compiler generated this skeleton class from Slice interface `::Ice::Locator`.
    /// @headerfile Ice/Ice.h
    class ICE_API Locator : public virtual Ice::Object
    {
    public:
        /// The associated proxy type.
        using ProxyType = LocatorPrx;

        /// Dispatches an incoming request to one of the member functions of this generated class, based on the operation name carried by the request.
        /// @param request The incoming request.
        /// @param sendResponse The callback to send the response.
        void dispatch(IncomingRequest& request, std::function<void(OutgoingResponse)> sendResponse) override;

        [[nodiscard]] std::vector<std::string> ice_ids(const Ice::Current& current) const override;

        [[nodiscard]] std::string ice_id(const Ice::Current& current) const override;

        /// Finds an object by identity and returns a dummy proxy with the endpoint(s) that can be used to reach this
        /// object. This dummy proxy may be an indirect proxy that requires further resolution using
        /// ::Ice::LocatorPrx::findAdapterById.
        /// @param id The identity.
        /// @param current The Current object of the incoming request.
        /// @return A dummy proxy, or null if an object with the requested identity was not found.
        /// @throws Ice::ObjectNotFoundException Thrown when an object with the requested identity was not found. The caller
        /// should treat this exception like a null return value.
        [[nodiscard]] virtual std::optional<Ice::ObjectPrx> findObjectById(Identity id, const Ice::Current& current) const = 0;

        /// @private
        void _iceD_findObjectById(Ice::IncomingRequest&, std::function<void(Ice::OutgoingResponse)>) const;

        /// Finds an object adapter by adapter ID and returns a dummy proxy with the object adapter's endpoint(s).
        /// @param id The adapter ID.
        /// @param current The Current object of the incoming request.
        /// @return A dummy proxy with the adapter's endpoints, or null if an object adapter with @p id was not found.
        /// @throws Ice::AdapterNotFoundException Thrown when an object adapter with this adapter ID was not found. The
        /// caller should treat this exception like a null return value.
        [[nodiscard]] virtual std::optional<Ice::ObjectPrx> findAdapterById(std::string id, const Ice::Current& current) const = 0;

        /// @private
        void _iceD_findAdapterById(Ice::IncomingRequest&, std::function<void(Ice::OutgoingResponse)>) const;

        /// Gets a proxy to the locator registry.
        /// @param current The Current object of the incoming request.
        /// @return A proxy to the locator registry, or null if this locator has no associated registry.
        [[nodiscard]] virtual std::optional<LocatorRegistryPrx> getRegistry(const Ice::Current& current) const = 0;

        /// @private
        void _iceD_getRegistry(Ice::IncomingRequest&, std::function<void(Ice::OutgoingResponse)>) const;

        /// Gets the type ID of the associated Slice interface.
        /// @return The string `"::Ice::Locator"`.
        static const char* ice_staticId() noexcept;
    };

    /// A shared pointer to a Locator.
    using LocatorPtr = std::shared_ptr<Locator>;

    /// Provides access to a LocatorPrx object via a fixed identity.
    /// A LocatorFinder is always registered with identity `Ice/LocatorFinder`. This allows clients to obtain the
    /// associated Locator proxy with just the endpoint information of the object. For example, you can use the
    /// LocatorFinder proxy `Ice/LocatorFinder:tcp -h somehost -p 4061` to get the Locator proxy
    /// `MyIceGrid/Locator:tcp -h somehost -p 4061`.
    /// @remarks The Slice compiler generated this skeleton class from Slice interface `::Ice::LocatorFinder`.
    /// @headerfile Ice/Ice.h
    class ICE_API LocatorFinder : public virtual Ice::Object
    {
    public:
        /// The associated proxy type.
        using ProxyType = LocatorFinderPrx;

        /// Dispatches an incoming request to one of the member functions of this generated class, based on the operation name carried by the request.
        /// @param request The incoming request.
        /// @param sendResponse The callback to send the response.
        void dispatch(IncomingRequest& request, std::function<void(OutgoingResponse)> sendResponse) override;

        [[nodiscard]] std::vector<std::string> ice_ids(const Ice::Current& current) const override;

        [[nodiscard]] std::string ice_id(const Ice::Current& current) const override;

        /// Gets a proxy to the associated ::Ice::LocatorPrx. The proxy might point to several replicas.
        /// @param current The Current object of the incoming request.
        /// @return The locator proxy. This proxy is never null.
        virtual std::optional<LocatorPrx> getLocator(const Ice::Current& current) = 0;

        /// @private
        void _iceD_getLocator(Ice::IncomingRequest&, std::function<void(Ice::OutgoingResponse)>);

        /// Gets the type ID of the associated Slice interface.
        /// @return The string `"::Ice::LocatorFinder"`.
        static const char* ice_staticId() noexcept;
    };

    /// A shared pointer to a LocatorFinder.
    using LocatorFinderPtr = std::shared_ptr<LocatorFinder>;
}

namespace Ice
{
    /// Client applications use the Locator object to resolve Ice indirect proxies. This object also allows
    /// server applications to retrieve a proxy to the associated LocatorRegistryPrx object where they can register
    /// their object adapters.
    /// @remarks The Slice compiler generated this skeleton class from Slice interface `::Ice::Locator`.
    /// @headerfile Ice/Ice.h
    class ICE_API AsyncLocator : public virtual Ice::Object
    {
    public:
        /// The associated proxy type.
        using ProxyType = LocatorPrx;

        /// Dispatches an incoming request to one of the member functions of this generated class, based on the operation name carried by the request.
        /// @param request The incoming request.
        /// @param sendResponse The callback to send the response.
        void dispatch(IncomingRequest& request, std::function<void(OutgoingResponse)> sendResponse) override;

        [[nodiscard]] std::vector<std::string> ice_ids(const Ice::Current& current) const override;

        [[nodiscard]] std::string ice_id(const Ice::Current& current) const override;

        /// Finds an object by identity and returns a dummy proxy with the endpoint(s) that can be used to reach this
        /// object. This dummy proxy may be an indirect proxy that requires further resolution using
        /// ::Ice::LocatorPrx::findAdapterById.
        /// @param id The identity.
        /// @param response The response callback. It accepts:
        /// - A dummy proxy, or null if an object with the requested identity was not found.
        /// @param exception The exception callback.
        /// @param current The Current object of the incoming request.
        /// @throws Ice::ObjectNotFoundException Thrown when an object with the requested identity was not found. The caller
        /// should treat this exception like a null return value.
        virtual void findObjectByIdAsync(Identity id, std::function<void(const std::optional<Ice::ObjectPrx>& returnValue)> response, std::function<void(std::exception_ptr)> exception, const Ice::Current& current) const = 0;

        /// @private
        void _iceD_findObjectById(Ice::IncomingRequest&, std::function<void(Ice::OutgoingResponse)>) const;

        /// Finds an object adapter by adapter ID and returns a dummy proxy with the object adapter's endpoint(s).
        /// @param id The adapter ID.
        /// @param response The response callback. It accepts:
        /// - A dummy proxy with the adapter's endpoints, or null if an object adapter with @p id was not found.
        /// @param exception The exception callback.
        /// @param current The Current object of the incoming request.
        /// @throws Ice::AdapterNotFoundException Thrown when an object adapter with this adapter ID was not found. The
        /// caller should treat this exception like a null return value.
        virtual void findAdapterByIdAsync(std::string id, std::function<void(const std::optional<Ice::ObjectPrx>& returnValue)> response, std::function<void(std::exception_ptr)> exception, const Ice::Current& current) const = 0;

        /// @private
        void _iceD_findAdapterById(Ice::IncomingRequest&, std::function<void(Ice::OutgoingResponse)>) const;

        /// Gets a proxy to the locator registry.
        /// @param response The response callback. It accepts:
        /// - A proxy to the locator registry, or null if this locator has no associated registry.
        /// @param exception The exception callback.
        /// @param current The Current object of the incoming request.
        virtual void getRegistryAsync(std::function<void(const std::optional<LocatorRegistryPrx>& returnValue)> response, std::function<void(std::exception_ptr)> exception, const Ice::Current& current) const = 0;

        /// @private
        void _iceD_getRegistry(Ice::IncomingRequest&, std::function<void(Ice::OutgoingResponse)>) const;

        /// Gets the type ID of the associated Slice interface.
        /// @return The string `"::Ice::Locator"`.
        static const char* ice_staticId() noexcept;
    };

    /// A shared pointer to an AsyncLocator.
    using AsyncLocatorPtr = std::shared_ptr<AsyncLocator>;

    /// Provides access to a LocatorPrx object via a fixed identity.
    /// A LocatorFinder is always registered with identity `Ice/LocatorFinder`. This allows clients to obtain the
    /// associated Locator proxy with just the endpoint information of the object. For example, you can use the
    /// LocatorFinder proxy `Ice/LocatorFinder:tcp -h somehost -p 4061` to get the Locator proxy
    /// `MyIceGrid/Locator:tcp -h somehost -p 4061`.
    /// @remarks The Slice compiler generated this skeleton class from Slice interface `::Ice::LocatorFinder`.
    /// @headerfile Ice/Ice.h
    class ICE_API AsyncLocatorFinder : public virtual Ice::Object
    {
    public:
        /// The associated proxy type.
        using ProxyType = LocatorFinderPrx;

        /// Dispatches an incoming request to one of the member functions of this generated class, based on the operation name carried by the request.
        /// @param request The incoming request.
        /// @param sendResponse The callback to send the response.
        void dispatch(IncomingRequest& request, std::function<void(OutgoingResponse)> sendResponse) override;

        [[nodiscard]] std::vector<std::string> ice_ids(const Ice::Current& current) const override;

        [[nodiscard]] std::string ice_id(const Ice::Current& current) const override;

        /// Gets a proxy to the associated ::Ice::LocatorPrx. The proxy might point to several replicas.
        /// @param response The response callback. It accepts:
        /// - The locator proxy. This proxy is never null.
        /// @param exception The exception callback.
        /// @param current The Current object of the incoming request.
        virtual void getLocatorAsync(std::function<void(const std::optional<LocatorPrx>& returnValue)> response, std::function<void(std::exception_ptr)> exception, const Ice::Current& current) = 0;

        /// @private
        void _iceD_getLocator(Ice::IncomingRequest&, std::function<void(Ice::OutgoingResponse)>);

        /// Gets the type ID of the associated Slice interface.
        /// @return The string `"::Ice::LocatorFinder"`.
        static const char* ice_staticId() noexcept;
    };

    /// A shared pointer to an AsyncLocatorFinder.
    using AsyncLocatorFinderPtr = std::shared_ptr<AsyncLocatorFinder>;
}

// NOLINTEND(modernize-concat-nested-namespaces)

#include <Ice/PopDisableWarnings.h>
#endif
