You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: driver.go
    path of file: ./repos/ferret/pkg/drivers
    
    the code of the file until where you have to start completion: package drivers

import (
	"context"
	"io"

	"github.com/MontFerret/ferret/pkg/runtime/core"
)

type (
	ctxKey struct{}

	ctxValue struct {
		opts    *globalOptions
		drivers map[string]Driver
	}

	Driver interface {
		io.Closer
		Name() string
		Open(ctx context.Context, params Params) (HTMLPage, error)
		Parse(ctx context.Context, par
    
func withContext(ctx context.Context, drv Driver, opts []GlobalOption) context.Context {
	ctx, value := resolveValue(ctx)

	value.drivers[drv.Name()] = drv

	for _, opt := range opts {
		opt(drv, value.opts)
	}

	// set first registered driver as a default one
	if value.opts.defaultDriver == "" {
		value.opts.defaultDriver = drv.Name()
	}

	return ctx
}