code: def run_in_greenlet(callable):
      
      @wraps(callable)
      async def _(*args, **kwargs):
          green = greenlet(callable)
          # switch to the new greenlet
          result = green.switch(*args, **kwargs)
          # back to the parent
          while isawaitable(result):
              # keep on switching back to the greenlet if we get an awaitable
              try:
                  result = green.switch((await result))
              except Exception:
                  exc_info = sys.exc_info()
                  result = green.throw(*exc_info)
  
          return green.switch(result)
  
      return _
docs: Decorator to run a ``callable`` on a new greenlet.
  
      A ``callable`` decorated with this decorator returns a coroutine