code: def match(self, path, method):
          
          if path != '/':
              path = path.rstrip('/')
          method = method.upper()
  
          status = 404
          for p, n, m in self.endpoints:
              matched, url_vars = match_path(p, path)
              if not matched:  # path: not matched
                  continue
  
              if method not in m:  # path: matched, method: not matched
                  status = 405
                  raise HTTPError(status=status, body=f'Method not found: {path} {method}')  # it has security issue??
  
              callback, type_hints = m[method]
              type_matched, typed_url_vars = match_url_vars_type(url_vars, type_hints)
              if not type_matched:
                  continue  # path: not matched (types are different)
              return callback, typed_url_vars
          raise HTTPError(status=status, body=f'Not found: {path}')
docs: Get callback and url_vars.
  
          >>> from kobin import Response
          >>> r = Router()
          >>> def view(user_id: int) -> Response:
          ...     return Response(f'You are {user_id}')
          ...
          >>> r.add('/users/{user_id}', 'GET', 'user-detail', view)
  
          >>> callback, url_vars = r.match('/users/1', 'GET')
          >>> url_vars
          {'user_id': 1}
          >>> response = callback(**url_vars)
          >>> response.body
          [b'You are 1']
  
          >>> callback, url_vars = r.match('/notfound', 'GET')
          Traceback (most recent call last):
              ...
          kobin.responses.HTTPError