# Path: async_v20/interface/decorators.py
# def endpoint(endpoint, rest=False, initialize_required=True):
#     """Define a method call to be exposed to the user"""
# 
#     def wrapper(method):
#         """Take the wrapped method and return a coroutine"""
# 
#         method.endpoint = endpoint
# 
#         method.initialize_required = initialize_required
# 
#         sig = signature(method)
# 
#         method.__doc__ = create_doc_signature(method, sig)
# 
#         @wraps(method)
#         async def wrap(self, *args, **kwargs):
#             if initialize_required:
#                 await self.initialize(method.__name__)
#             elif not self.session:
#                 await self.initialize_session()
# 
#             logger.info('%s(args=%s, kwargs=%s)', method.__name__, args, kwargs)
#             arguments = construct_arguments(self, sig, *args, **kwargs)
# 
#             enable_rest = False
#             if rest and arguments[SinceTransactionID] == self.default_parameters[SinceTransactionID]:
#                 enable_rest = True
# 
#             request_kwargs = create_request_kwargs(self, endpoint, arguments)
# 
#             await self._request_limiter()
# 
#             if self.debug:
#                 logger.debug('client.session.request(kwargs=%s)', request_kwargs)
#             response = self.session.request(**request_kwargs)
# 
#             return await parse_response(self, response, endpoint, enable_rest, method.__name__)
# 
# 
#         wrap.__signature__ = sig
# 
#         return wrap
# 
#     return wrapper
# 
# Path: async_v20/endpoints/annotations.py
# class UserSpecifier(str):
#     pass


from .decorators import endpoint
from ..endpoints.annotations import UserSpecifier
from ..endpoints.user import *

__all__ = ['UserInterface']


class UserInterface(object):
    @endpoint(GETUserSpecifier)
    def get_user_info(self, user_specifier: UserSpecifier):
        """
        Fetch the user information for the specified user. This endpoint is
        intended to be used by the user thyself to obtain their own
        information.

        Args:

            user_specifier: :class:`~async_v20.endpoints.annotations.UserSpecifier`
                The User Specifier

        Returns:

            status [200]
                :class:`~async_v20.interface.response.Response`
                (userInfo= :class:`~async_v20.UserInfo`)
        """
        pass


# Path: async_v20/interface/decorators.py
# def endpoint(endpoint, rest=False, initialize_required=True):
#     """Define a method call to be exposed to the user"""
# 
#     def wrapper(method):
#         """Take the wrapped method and return a coroutine"""
# 
#         method.endpoint = endpoint
# 
#         method.initialize_required = initialize_required
# 
#         sig = signature(method)
# 
#         method.__doc__ = create_doc_signature(method, sig)
# 
#         @wraps(method)
#         async def wrap(self, *args, **kwargs):
#             if initialize_required:
#                 await self.initialize(method.__name__)
#             elif not self.session:
#                 await self.initialize_session()
# 
#             logger.info('%s(args=%s, kwargs=%s)', method.__name__, args, kwargs)
#             arguments = construct_arguments(self, sig, *args, **kwargs)
# 
#             enable_rest = False
#             if rest and arguments[SinceTransactionID] == self.default_parameters[SinceTransactionID]:
#                 enable_rest = True
# 
#             request_kwargs = create_request_kwargs(self, endpoint, arguments)
# 
#             await self._request_limiter()
# 
#             if self.debug:
#                 logger.debug('client.session.request(kwargs=%s)', request_kwargs)
#             response = self.session.request(**request_kwargs)
# 
#             return await parse_response(self, response, endpoint, enable_rest, method.__name__)
# 
# 
#         wrap.__signature__ = sig
# 
#         return wrap
# 
#     return wrapper
# 
# Path: async_v20/endpoints/annotations.py
# class UserSpecifier(str):
#     pass


# Path: async_v20/interface/user.py
from .decorators import endpoint
from ..endpoints.annotations import UserSpecifier
from ..endpoints.user import *


__all__ = ['UserInterface']


class UserInterface(object):
    @endpoint(GETUserSpecifier)
    def get_user_info(self, user_specifier: UserSpecifier):
        """
        Fetch the user information for the specified user. This endpoint is
        intended to be used by the user thyself to obtain their own
        information.

        Args:

            user_specifier: :class:`~async_v20.endpoints.annotations.UserSpecifier`
                The User Specifier

        Returns:

            status [200]
                :class:`~async_v20.interface.response.Response`
                (userInfo= :class:`~async_v20.UserInfo`)
        """
        pass


    @endpoint(GETExternalInfo)