func (e *EntryBase) Prefetched() *EntryBase {
	e.isPrefetched = true
	return e
}
Prefetched marks the entry as a prefetched entry. A prefetched entry
is an entry that was fetched as part of a batch operation that
fetched multiple levels of hierarchy at once. Volume directories and
files are good examples of prefetched entries (see the volume
package for more details).
package plugin
import (
	"context"
	"flag"
	"time"
	"github.com/puppetlabs/wash/activity"
)
type defaultOpCode int8
const (
	ListOp defaultOpCode = iota
	ReadOp
	MetadataOp
)
var defaultOpCodeToNameMap = [3]string{"List", "Read", "Metadata"}
type EntryBase struct {
	name                     string
	attributes               EntryAttributes
	specifiedPartialMetadata JSONObject
	slashReplacer            rune
	id                       string
	ttl                      [3]time.Duration
	wrappedTypes             SchemaMap
	isPrefetched             bool
	isInaccessible           bool
}
func NewEntry(name string) EntryBase {
	if name == "" {
		panic("plugin.NewEntry: received an empty name")
	}
	e := EntryBase{
		name:          name,
		slashReplacer: '#',
	}
	for op := range e.ttl {
		e.SetTTLOf(defaultOpCode(op), 15*time.Second)
	}
	return e
}
func (e *EntryBase) partialMetadata() JSONObject {
	if e.specifiedPartialMetadata != nil {
		return e.specifiedPartialMetadata
	}
	return e.attributes.ToMap()
}
func (e *EntryBase) Metadata(ctx context.Context) (JSONObject, error) {
	e.DisableCachingFor(MetadataOp)
	return e.partialMetadata(), nil
}
func (e *EntryBase) eb() *EntryBase {
	return e
}
func (e *EntryBase) Name() string {
	return e.name
}
func (e *EntryBase) ID() string {
	return e.id
}
func (e *EntryBase) String() string {
	return e.id
}
func (e *EntryBase) Attributes() *EntryAttributes {
	return &e.attributes
}
func (e *EntryBase) SetAttributes(attr EntryAttributes) *EntryBase {
	e.attributes = attr
	return e
}
func (e *EntryBase) SetPartialMetadata(obj interface{}) *EntryBase {
	e.specifiedPartialMetadata = ToJSONObject(obj)
	return e
}
func (e *EntryBase) MarkInaccessible(ctx context.Context, err error) {
	activity.Record(ctx, "Omitting %v: %v", e.id, err)
	e.isInaccessible = true
}
func (e *EntryBase) IsInaccessible() bool {
	return e.isInaccessible
}