func (a *EntryAttributes) Mtime() time.Time {
	return a.mtime
}
Mtime returns the entry's last modified time
package plugin
import (
	"encoding/json"
	"fmt"
	"os"
	"time"
	"github.com/Benchkram/errz"
	"github.com/puppetlabs/wash/munge"
)
type JSONObject = map[string]interface{}
func ToJSONObject(v interface{}) JSONObject {
	if obj, ok := v.(JSONObject); ok {
		return obj
	}
	var err error
	var inrec []byte
	if arr, ok := v.([]byte); ok {
		inrec = arr
	} else {
		if inrec, err = json.Marshal(v); err != nil {
			panic(err)
		}
	}
	var obj JSONObject
	errz.Fatal(json.Unmarshal(inrec, &obj))
	return obj
}
type Shell int
const (
	UnknownShell Shell = iota
	POSIXShell
	PowerShell
)
var shellNames = [3]string{"unknown", "posixshell", "powershell"}
func (sh Shell) String() string {
	return shellNames[sh]
}
type OS struct {
	LoginShell Shell
}
func (o OS) ToMap() map[string]interface{} {
	return map[string]interface{}{
		"login_shell": o.LoginShell.String(),
	}
}
type EntryAttributes struct {
	atime   time.Time
	mtime   time.Time
	ctime   time.Time
	crtime  time.Time
	os      OS
	hasOS   bool  
	mode    os.FileMode
	hasMode bool
	size    uint64
	hasSize bool
}
func (a *EntryAttributes) HasAtime() bool {
	return !a.atime.IsZero()
}
func (a *EntryAttributes) Atime() time.Time {
	return a.atime
}
func (a *EntryAttributes) SetAtime(atime time.Time) *EntryAttributes {
	a.atime = atime
	return a
}
func (a *EntryAttributes) HasMtime() bool {
	return !a.mtime.IsZero()
}