Documentation
¶
Index ¶
- Constants
- Variables
- func Contains(left, right Id) bool
- func ContainsExactly(left, right Id) bool
- func DontAbbreviateString[VPtr interfaces.Stringer](k VPtr) (string, error)
- func DontExpandString(v string) (string, error)
- func Equals(left, right interfaces.ObjectId) (ok bool)
- func ErrOnConfig(value string) (err error)
- func ErrOnConfigBytes(b []byte) (err error)
- func Expand(id *ObjectId, abbr Abbr) (err error)
- func FormattedString(id Id) string
- func GetObjectIdPool() interfaces.Pool[ObjectId, *ObjectId]
- func HasParentPrefix(a, b TagStruct) (has bool)
- func ITagSeqToTagStructPtrSeq(itags interfaces.Seq[Tag]) interfaces.Seq[*TagStruct]
- func ITagSeqToTagStructSeq(itags interfaces.Seq[Tag]) interfaces.Seq[TagStruct]
- func IsBuiltin(id interfaces.ObjectId) bool
- func IsDependentLeaf(a TagStruct) (has bool)
- func IsEmpty(id Id) bool
- func IsErrInvalid(err error) bool
- func IsErrInvalidSigil(err error) bool
- func IsVirtual(id Id) bool
- func LeftSubtract[ID interfaces.Stringer, ID_PTR interfaces.StringSetterPtr[ID]](base, toSubtract ID) (c ID, err error)
- func MakeTypeString(value string) string
- func MakeTypeStruct(value string) (tipe typeStruct, err error)
- func MustTypeStruct(value string) (tipe typeStruct)
- func SeqIdCompare(left, right objectId3) cmp.Result
- func SetObjectIdOrBlob(id *ObjectId, other interfaces.ObjectId) (err error)
- func SetOnlyNotUnknownGenre(id *ObjectId, value string) (err error)
- func SetWithGenre(id *ObjectId, value string, genre interfaces.GenreGetter) (err error)
- func SetWithString(id *ObjectId, value string) pkgError
- func SigilFieldFunc(c rune) (ok bool)
- func TagEquals(left, right Tag) bool
- func TagIsVirtual(tag Tag) bool
- func TagSetMutableAdd(set TagSetMutable, itag Tag)
- func TagStructSeqToITag(tags interfaces.Seq[TagStruct]) interfaces.Seq[Tag]
- func TokenIsConfig(token doddish.Token) bool
- func ValidateSeqAndGetGenre(seq doddish.Seq) (genre genres.Genre, err error)
- type Abbr
- type BuiltinType
- type Clock
- type ErrInvalidId
- type ExternalObjectId
- func (id *ExternalObjectId) AppendBinary(bites []byte) ([]byte, error)
- func (id *ExternalObjectId) GetExternalObjectId() interfaces.ExternalObjectId
- func (id *ExternalObjectId) GetGenre() interfaces.Genre
- func (id *ExternalObjectId) IsEmpty() bool
- func (id *ExternalObjectId) MarshalBinary() (bites []byte, err error)
- func (id *ExternalObjectId) Reset()
- func (id *ExternalObjectId) ResetWith(src *ExternalObjectId)
- func (id *ExternalObjectId) Set(value string) (err error)
- func (id *ExternalObjectId) SetBlob(v string) (err error)
- func (id *ExternalObjectId) SetGenre(genre interfaces.Genre) (err error)
- func (id *ExternalObjectId) SetObjectIdLike(other Id) (err error)
- func (id *ExternalObjectId) SetWithGenre(value string, genre interfaces.Genre) (err error)
- func (id *ExternalObjectId) String() string
- func (id *ExternalObjectId) ToSeq() doddish.Seq
- func (id *ExternalObjectId) ToType() TypeStruct
- func (id *ExternalObjectId) UnmarshalBinary(bites []byte) (err error)
- type Field
- type Genre
- func (genre *Genre) Add(bs ...genres.Genre)
- func (genre *Genre) AddString(v string) (err error)
- func (genre Genre) Byte() byte
- func (genre Genre) Contains(b interfaces.GenreGetter) bool
- func (genre Genre) ContainsOneOf(b interfaces.GenreGetter) bool
- func (genre *Genre) Del(b interfaces.GenreGetter)
- func (genre Genre) Equals(b Genre) bool
- func (genre Genre) IsEmpty() bool
- func (genre Genre) ReadByte() (byte, error)
- func (genre *Genre) ReadFrom(r io.Reader) (n int64, err error)
- func (genre *Genre) ReadFromBoxScanner(scanner *doddish.Scanner) (err error)
- func (genre *Genre) Reset()
- func (genre *Genre) ResetWith(b Genre)
- func (genre *Genre) Set(v string) (err error)
- func (genre Genre) Slice() []genres.Genre
- func (genre Genre) String() string
- func (genre *Genre) WriteTo(w io.Writer) (n int64, err error)
- type Id
- type IdMutable
- type InlineTypeChecker
- type ObjectId
- type ObjectIdGetter
- type ProbeId
- type ProbeIdWithObjectId
- type Provider
- type RepoId
- func (id RepoId) AppendBinary(text []byte) ([]byte, error)
- func (id RepoId) Equals(b RepoId) bool
- func (id RepoId) EqualsRepoId(kg interfaces.RepoIdGetter) bool
- func (id RepoId) GetGenre() interfaces.Genre
- func (id RepoId) GetObjectIdString() string
- func (id RepoId) GetQueryPrefix() string
- func (id RepoId) GetRepoId() interfaces.RepoId
- func (id RepoId) GetRepoIdString() string
- func (id RepoId) IsEmpty() bool
- func (id RepoId) MarshalBinary() (text []byte, err error)
- func (id RepoId) MarshalText() (text []byte, err error)
- func (id *RepoId) Reset()
- func (id *RepoId) ResetWith(e1 RepoId)
- func (id *RepoId) Set(v string) (err error)
- func (id RepoId) String() string
- func (id RepoId) StringWithSlashPrefix() string
- func (id RepoId) ToSeq() doddish.Seq
- func (id RepoId) ToType() TypeStruct
- func (id *RepoId) UnmarshalBinary(text []byte) (err error)
- func (id *RepoId) UnmarshalText(text []byte) (err error)
- type SeqId
- type Set
- type SetMutable
- type Sigil
- func (sigil *Sigil) Add(b Sigil)
- func (sigil Sigil) Byte() byte
- func (sigil Sigil) Contains(b Sigil) bool
- func (sigil Sigil) ContainsOneOf(b Sigil) bool
- func (sigil *Sigil) Del(b Sigil)
- func (sigil Sigil) Equals(b Sigil) bool
- func (sigil Sigil) GetGenre() interfaces.Genre
- func (sigil Sigil) IncludesExternal() bool
- func (sigil Sigil) IncludesHidden() bool
- func (sigil Sigil) IncludesHistory() bool
- func (sigil Sigil) IncludesLatest() bool
- func (sigil Sigil) IsEmpty() bool
- func (sigil Sigil) IsLatestOrUnknown() bool
- func (sigil Sigil) ReadByte() (byte, error)
- func (sigil *Sigil) ReadFrom(r io.Reader) (n int64, err error)
- func (sigil *Sigil) Reset()
- func (sigil *Sigil) ResetWith(b Sigil)
- func (sigil *Sigil) Set(v string) (err error)
- func (sigil *Sigil) SetByte(r byte) (err error)
- func (sigil Sigil) String() string
- func (sigil *Sigil) WriteTo(w io.Writer) (n int64, err error)
- type Slice
- type StringerSansOp
- type StringerSansRepo
- type Tag
- type TagSet
- func CloneTagSet(tags TagSet) TagSet
- func IntersectPrefixes(haystack TagSet, needle TagStruct) (s3 TagSet)
- func MakeTagSetFromISeq(itags interfaces.Seq[Tag]) (s TagSet)
- func MakeTagSetFromISlice(itags ...Tag) (s TagSet)
- func MakeTagSetFromSlice(tags ...TagStruct) (s TagSet)
- func MakeTagSetStrings(tagStrings ...string) (s TagSet, err error)
- func SubtractPrefix(input TagSet, tag TagStruct) (output TagSet)
- type TagSetMutable
- type TagSlice
- type TagStruct
- type Tai
- func (tai Tai) After(b Tai) bool
- func (tai Tai) AppendBinary(text []byte) ([]byte, error)
- func (tai Tai) AsTime() (t1 thyme.Time)
- func (tai Tai) Before(b Tai) bool
- func (tai Tai) Equals(t1 Tai) bool
- func (tai Tai) Format(v string) string
- func (tai Tai) GetGenre() interfaces.Genre
- func (tai Tai) GetObjectIdString() string
- func (tai Tai) GetTai() Tai
- func (tai Tai) IsEmpty() (ok bool)
- func (tai Tai) IsZero() (ok bool)
- func (tai Tai) Less(t1 Tai) bool
- func (tai Tai) MarshalBinary() (text []byte, err error)
- func (tai Tai) MarshalText() (text []byte, err error)
- func (tai Tai) Parts() [3]string
- func (tai *Tai) ReadFrom(r io.Reader) (n int64, err error)
- func (tai *Tai) Reset()
- func (tai *Tai) ResetWith(b Tai)
- func (tai *Tai) Set(value string) (err error)
- func (tai *Tai) SetFromRFC3339(v string) (err error)
- func (tai Tai) SortCompare(t1 Tai) cmp.Result
- func (tai Tai) String() (v string)
- func (tai Tai) StringBoxFormat() string
- func (tai Tai) StringDefaultFormat() string
- func (id Tai) ToSeq() doddish.Seq
- func (id Tai) ToType() TypeStruct
- func (tai *Tai) UnmarshalBinary(text []byte) (err error)
- func (tai *Tai) UnmarshalText(text []byte) (err error)
- func (tai Tai) WriteTo(w io.Writer) (n int64, err error)
- type TaiRFC3339Value
- type Type
- type TypeMutable
- type TypeMutableSet
- type TypeSet
- type TypeStruct
- type TypedBlob
- type ZettelId
- func MakeZettelId(v string) (h *ZettelId, err error)
- func MakeZettelIdFromHeadAndTail(head, tail string) (h *ZettelId, err error)
- func MakeZettelIdFromProvidersAndCoordinates(coordinate coordinates.Int, leftProvider Provider, rightProvider Provider) (h *ZettelId, err error)
- func MustZettelId(v string) (h *ZettelId)
- func NewZettelIdEmpty() ZettelId
- func (id ZettelId) AppendBinary(text []byte) ([]byte, error)
- func (id ZettelId) Equals(b ZettelId) bool
- func (id ZettelId) GetGenre() interfaces.Genre
- func (id ZettelId) GetHead() string
- func (id ZettelId) GetObjectIdString() string
- func (id ZettelId) GetTail() string
- func (id ZettelId) IsEmpty() bool
- func (id ZettelId) Less(j ZettelId) bool
- func (id ZettelId) MarshalBinary() (text []byte, err error)
- func (id ZettelId) MarshalText() (text []byte, err error)
- func (id *ZettelId) Reset()
- func (id *ZettelId) ResetWith(h1 ZettelId)
- func (id *ZettelId) Set(value string) (err error)
- func (id *ZettelId) SetWithSeq(seq doddish.Seq) (err error)
- func (id ZettelId) String() string
- func (id ZettelId) ToSeq() doddish.Seq
- func (id ZettelId) ToType() TypeStruct
- func (id *ZettelId) UnmarshalBinary(text []byte) (err error)
- func (id *ZettelId) UnmarshalText(text []byte) (err error)
- type ZettelIdMutableSet
- type ZettelIdSet
Constants ¶
View Source
const ( SigilUnknown = Sigil(iota) SigilLatest = Sigil(1 << iota) SigilHistory SigilExternal SigilHidden SigilMax SigilAll = Sigil(^byte(0)) )
View Source
const ( // TODO remove deprecated // keep sorted TypeInventoryListJsonV0 = "!inventory_list-json-v0" TypeInventoryListV0 = "!inventory_list-v0" // Deprevated TypeInventoryListV1 = "!inventory_list-v1" TypeInventoryListV2 = "!inventory_list-v2" TypeLuaTagV1 = "!lua-tag-v1" // Deprecated TypeLuaTagV2 = "!lua-tag-v2" TypeTomlBlobStoreConfigSftpExplicitV0 = "!toml-blob_store_config_sftp-explicit-v0" TypeTomlBlobStoreConfigSftpViaSSHConfigV0 = "!toml-blob_store_config_sftp-ssh_config-v0" TypeTomlBlobStoreConfigV0 = "!toml-blob_store_config-v0" TypeTomlBlobStoreConfigV1 = "!toml-blob_store_config-v1" TypeTomlBlobStoreConfigV2 = "!toml-blob_store_config-v2" TypeTomlBlobStoreConfigPointerV0 = "!toml-blob_store_config-pointer-v0" TypeTomlBlobStoreConfigVCurrent = TypeTomlBlobStoreConfigV2 TypeTomlConfigImmutableV1 = "!toml-config-immutable-v1" // Deprecated TypeTomlConfigImmutableV2 = "!toml-config-immutable-v2" TypeTomlConfigV0 = "!toml-config-v0" // Deprecated TypeTomlConfigV1 = "!toml-config-v1" TypeTomlConfigV2 = "!toml-config-v2" TypeTomlRepoDotenvXdgV0 = "!toml-repo-dotenv_xdg-v0" TypeTomlRepoLocalOverridePath = "!toml-repo-local_override_path-v0" TypeTomlRepoUri = "!toml-repo-uri-v0" TypeTomlTagV0 = "!toml-tag-v0" // Deprecated TypeTomlTagV1 = "!toml-tag-v1" TypeTomlTypeV0 = "!toml-type-v0" // Deprecated TypeTomlTypeV1 = "!toml-type-v1" TypeTomlWorkspaceConfigV0 = "!toml-workspace_config-v0" TypeTomlWorkspaceConfigVCurrent = TypeTomlWorkspaceConfigV0 TypeZettelIdListV0 = "!zettel_id_list-v0" // not used yet // Aliases TypeInventoryListVCurrent = TypeInventoryListV2 )
View Source
const RepoIdRegexString = `^(/)?[-a-z0-9_]+$`
View Source
const TagRegexString = `^%?[-a-z0-9_]+$`
Variables ¶
View Source
var Config config
View Source
var (
TagResetter = sTagResetter
)
Functions ¶
func DontAbbreviateString ¶
func DontAbbreviateString[VPtr interfaces.Stringer](k VPtr) (string, error)
func Equals ¶
func Equals(left, right interfaces.ObjectId) (ok bool)
TODO rewrite to use ToSeq comparison
func GetObjectIdPool ¶
func GetObjectIdPool() interfaces.Pool[ObjectId, *ObjectId]
func ITagSeqToTagStructPtrSeq ¶
func ITagSeqToTagStructPtrSeq(itags interfaces.Seq[Tag]) interfaces.Seq[*TagStruct]
func ITagSeqToTagStructSeq ¶
func ITagSeqToTagStructSeq(itags interfaces.Seq[Tag]) interfaces.Seq[TagStruct]
func IsBuiltin ¶
func IsBuiltin(id interfaces.ObjectId) bool
func LeftSubtract ¶
func LeftSubtract[ ID interfaces.Stringer, ID_PTR interfaces.StringSetterPtr[ID], ]( base, toSubtract ID, ) (c ID, err error)
func SetObjectIdOrBlob ¶
func SetObjectIdOrBlob( id *ObjectId, other interfaces.ObjectId, ) (err error)
func SetOnlyNotUnknownGenre ¶
func SetWithGenre ¶
func SetWithGenre( id *ObjectId, value string, genre interfaces.GenreGetter, ) (err error)
func TagSetMutableAdd ¶
func TagSetMutableAdd(set TagSetMutable, itag Tag)
func TagStructSeqToITag ¶
func TagStructSeqToITag(tags interfaces.Seq[TagStruct]) interfaces.Seq[Tag]
Types ¶
type Abbr ¶
type Abbr struct {
BlobId interfaces.Abbreviator
ZettelId interfaces.Abbreviator
}
func (Abbr) AbbreviateObjectId ¶
func (Abbr) AbbreviateZettelIdOnly ¶
func (Abbr) ExpanderFor ¶
func (a Abbr) ExpanderFor(g genres.Genre) interfaces.FuncExpandString
type BuiltinType ¶
type BuiltinType struct {
TypeStruct
genres.Genre
Default bool
}
func Get ¶
func Get(id interfaces.ObjectId) (BuiltinType, bool)
func GetOrPanic ¶
func GetOrPanic(idString string) BuiltinType
type ErrInvalidId ¶
type ErrInvalidId string
func (ErrInvalidId) Error ¶
func (e ErrInvalidId) Error() string
func (ErrInvalidId) Is ¶
func (e ErrInvalidId) Is(err error) (ok bool)
type ExternalObjectId ¶
type ExternalObjectId struct {
// contains filtered or unexported fields
}
func MakeExternalObjectId ¶
func MakeExternalObjectId(genre genres.Genre, value string) *ExternalObjectId
func (*ExternalObjectId) AppendBinary ¶
func (id *ExternalObjectId) AppendBinary(bites []byte) ([]byte, error)
func (*ExternalObjectId) GetExternalObjectId ¶
func (id *ExternalObjectId) GetExternalObjectId() interfaces.ExternalObjectId
func (*ExternalObjectId) GetGenre ¶
func (id *ExternalObjectId) GetGenre() interfaces.Genre
func (*ExternalObjectId) IsEmpty ¶
func (id *ExternalObjectId) IsEmpty() bool
func (*ExternalObjectId) MarshalBinary ¶
func (id *ExternalObjectId) MarshalBinary() (bites []byte, err error)
func (*ExternalObjectId) Reset ¶
func (id *ExternalObjectId) Reset()
func (*ExternalObjectId) ResetWith ¶
func (id *ExternalObjectId) ResetWith(src *ExternalObjectId)
func (*ExternalObjectId) Set ¶
func (id *ExternalObjectId) Set(value string) (err error)
func (*ExternalObjectId) SetBlob ¶
func (id *ExternalObjectId) SetBlob(v string) (err error)
func (*ExternalObjectId) SetGenre ¶
func (id *ExternalObjectId) SetGenre(genre interfaces.Genre) (err error)
func (*ExternalObjectId) SetObjectIdLike ¶
func (id *ExternalObjectId) SetObjectIdLike(other Id) (err error)
func (*ExternalObjectId) SetWithGenre ¶
func (id *ExternalObjectId) SetWithGenre( value string, genre interfaces.Genre, ) (err error)
func (*ExternalObjectId) String ¶
func (id *ExternalObjectId) String() string
func (*ExternalObjectId) ToSeq ¶
func (id *ExternalObjectId) ToSeq() doddish.Seq
func (*ExternalObjectId) ToType ¶
func (id *ExternalObjectId) ToType() TypeStruct
func (*ExternalObjectId) UnmarshalBinary ¶
func (id *ExternalObjectId) UnmarshalBinary(bites []byte) (err error)
type Field ¶
type Field struct {
// contains filtered or unexported fields
}
type Genre ¶
type Genre byte
func (Genre) Contains ¶
func (genre Genre) Contains(b interfaces.GenreGetter) bool
func (Genre) ContainsOneOf ¶
func (genre Genre) ContainsOneOf(b interfaces.GenreGetter) bool
func (*Genre) Del ¶
func (genre *Genre) Del(b interfaces.GenreGetter)
func (*Genre) ReadFromBoxScanner ¶
type Id ¶
type Id interface {
interfaces.ObjectId
encoding.BinaryMarshaler
encoding.BinaryAppender
ToSeq() doddish.Seq
ToType() TypeStruct
IsEmpty() bool
}
type IdMutable ¶
type InlineTypeChecker ¶
TODO rename to BinaryTypeChecker and flip uses
type ObjectId ¶
type ObjectId = objectId2
type ProbeId ¶
type ProbeId struct {
Key string
Id interfaces.MarklId
}
type Provider ¶
type Provider interface {
MakeZettelIdFromCoordinates(i coordinates.Int) (string, error)
}
type RepoId ¶
type RepoId struct {
// contains filtered or unexported fields
}
func (RepoId) EqualsRepoId ¶
func (id RepoId) EqualsRepoId(kg interfaces.RepoIdGetter) bool
func (RepoId) GetGenre ¶
func (id RepoId) GetGenre() interfaces.Genre
func (RepoId) GetRepoId ¶
func (id RepoId) GetRepoId() interfaces.RepoId
func (RepoId) ToType ¶
func (id RepoId) ToType() TypeStruct
type SeqId ¶
type SeqId = objectId3
type Set ¶
type SetMutable ¶
type SetMutable[ELEMENT any] = interface { Set[ELEMENT] interfaces.Adder[ELEMENT] DelKey(string) error interfaces.Resetable }
type Slice ¶
type Slice[ELEMENT any] = collections_slice.Slice[ELEMENT]
type StringerSansOp ¶
type StringerSansOp struct {
Id Id
}
func (StringerSansOp) String ¶
func (stringer StringerSansOp) String() string
type StringerSansRepo ¶
type StringerSansRepo struct {
Id Id
}
func (*StringerSansRepo) String ¶
func (stringer *StringerSansRepo) String() string
type TagSet ¶
type TagSet = Set[TagStruct]
var TagSetEmpty TagSet
func MakeTagSetFromISeq ¶
func MakeTagSetFromISeq(itags interfaces.Seq[Tag]) (s TagSet)
func MakeTagSetFromSlice ¶
TODO move to quiter
func MakeTagSetStrings ¶
TODO move to quiter
type TagSetMutable ¶
type TagSetMutable = SetMutable[TagStruct]
func MakeTagSetMutable ¶
func MakeTagSetMutable(tags ...TagStruct) TagSetMutable
TODO move to quiter
type TagSlice ¶
type TagSlice = collections_slice.Slice[TagStruct]
type TagStruct ¶
type TagStruct = tagStruct
type Tai ¶
type Tai struct {
// contains filtered or unexported fields
}
func (Tai) GetGenre ¶
func (tai Tai) GetGenre() interfaces.Genre
func (Tai) ToType ¶
func (id Tai) ToType() TypeStruct
type TaiRFC3339Value ¶
type TaiRFC3339Value Tai
func MakeTaiRFC3339Value ¶
func MakeTaiRFC3339Value(t Tai) *TaiRFC3339Value
func (*TaiRFC3339Value) Set ¶
func (t *TaiRFC3339Value) Set(v string) (err error)
func (*TaiRFC3339Value) String ¶
func (t *TaiRFC3339Value) String() string
type TypeMutableSet ¶
type TypeMutableSet = interfaces.SetMutable[TypeStruct]
func MakeMutableTypeSet ¶
func MakeMutableTypeSet(hs ...TypeStruct) TypeMutableSet
func MakeTypeMutableSet ¶
func MakeTypeMutableSet(hs ...TypeStruct) TypeMutableSet
type TypeSet ¶
type TypeSet = interfaces.Set[TypeStruct]
func MakeTypeSet ¶
func MakeTypeSet(es ...TypeStruct) (s TypeSet)
type TypeStruct ¶
type TypeStruct = typeStruct
func Default ¶
func Default(genre genres.Genre) (TypeStruct, bool)
func DefaultOrPanic ¶
func DefaultOrPanic(genre genres.Genre) TypeStruct
func ObjectIdToTypeStruct ¶
func ObjectIdToTypeStruct(id interfaces.ObjectId) TypeStruct
type TypedBlob ¶
type TypedBlob[T any] struct { Type TypeStruct Blob T }
type ZettelId ¶
type ZettelId struct {
// contains filtered or unexported fields
}
func MakeZettelIdFromHeadAndTail ¶
func MakeZettelIdFromProvidersAndCoordinates ¶
func MakeZettelIdFromProvidersAndCoordinates( coordinate coordinates.Int, leftProvider Provider, rightProvider Provider, ) (h *ZettelId, err error)
TODO-P3 is this really necessary?;w
func (ZettelId) GetGenre ¶
func (id ZettelId) GetGenre() interfaces.Genre
func (ZettelId) ToType ¶
func (id ZettelId) ToType() TypeStruct
type ZettelIdMutableSet ¶
type ZettelIdMutableSet = interfaces.SetMutable[ZettelId]
func MakeZettelIdMutableSet ¶
func MakeZettelIdMutableSet(hs ...ZettelId) ZettelIdMutableSet
type ZettelIdSet ¶
type ZettelIdSet = interfaces.Set[ZettelId]
Source Files
¶
- abbr.go
- clock.go
- collections.go
- errors.go
- external_object_id.go
- field.go
- genre.go
- id_stringer.go
- konfig.go
- main.go
- object_id2.go
- object_id3.go
- probe_id.go
- registry.go
- repo_id.go
- sigil.go
- tag.go
- tag_collections.go
- tai.go
- type.go
- type_collections.go
- typed_blob.go
- types_builtin.go
- zettel_id.go
- zettel_id_collections.go
Click to show internal directories.
Click to hide internal directories.