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: input.go
    path of file: ./repos/benthos/internal/impl/nanomsg
    
    the code of the file until where you have to start completion: package nanomsg

import (
	"context"
	"errors"
	"net/url"
	"strings"
	"sync"
	"time"

	"go.nanomsg.org/mangos/v3"
	"go.nanomsg.org/mangos/v3/protocol/pull"
	"go.nanomsg.org/mangos/v3/protocol/sub"

	"github.com/benthosdev/benthos/v4/internal/component"
	"github.com/benthosdev/benthos/v4/public/service"

	// Import all transport types.
	_ "go.nanomsg.org/mangos/v3/transport/all"
)

const (
	niFieldURLs        = "urls"
	niFieldBind        = "bind"
    
func inputConfigSpec() *service.ConfigSpec {
	return service.NewConfigSpec().
		Stable().
		Categories("Network").
		Summary(`Consumes messages via Nanomsg sockets (scalability protocols).`).
		Description(`Currently only PULL and SUB sockets are supported.`).
		Fields(
			service.NewURLListField(niFieldURLs).
				Description("A list of URLs to connect to (or as). If an item of the list contains commas it will be expanded into multiple URLs."),
			service.NewBoolField(niFieldBind).
				Description("Whether the URLs provided should be connected to, or bound as.").
				Default(true),
			service.NewStringEnumField(niFieldSocketType, "PULL", "SUB").
				Description("The socket type to use.").
				Default("PULL"),
			service.NewStringListField(niFieldSubFilters).
				Description("A list of subscription topic filters to use when consuming from a SUB socket. Specifying a single sub_filter of `''` will subscribe to everything.").
				Default([]any{}),
			service.NewDurationField(niFieldPollTimeout).
				Description("The period to wait until a poll is abandoned and reattempted.").
				Advanced().
				Default("5s"),
		)
}