func (fut *futureImpl) GetContext(ctx context.Context) (*Response, error) {
	fut.waitContext(ctx)
	if fut.err != nil {
		if fut.err == context.DeadlineExceeded || fut.err == context.Canceled {
			fut.conn.fetchFuture(fut.requestID)
		}
		return fut.resp, fut.err
	}
	fut.err = fut.resp.decodeBody()
	return fut.resp, fut.err
}
GetContext waits for future to be filled and returns Response and error.
package tarantool
import (
	"context"
	"time"
	"github.com/vmihailenco/msgpack/v5"
)
type Future interface {
	Get() (*Response, error)
	GetTyped(result interface{}) error
}
type FutureContext interface {
	GetContext(ctx context.Context) (*Response, error)
	GetTypedContext(ctx context.Context, result interface{}) error
}
type futureImpl struct {
	requestID uint32
	timeout   time.Duration
	conn      *Connection
	req       *Request
	resp      *Response
	err       error
	ready     chan struct{}
	next      *futureImpl
}
func (fut *futureImpl) Get() (*Response, error) {
	fut.wait()
	if fut.err != nil {
		return fut.resp, fut.err
	}
	fut.err = fut.resp.decodeBody()
	return fut.resp, fut.err
}
func (fut *futureImpl) GetTyped(result interface{}) error {
	fut.wait()
	if fut.err != nil {
		return fut.err
	}
	fut.err = fut.resp.decodeBodyTyped(result)
	return fut.err
}