298 lines
7.9 KiB
Go
298 lines
7.9 KiB
Go
package indexes
|
|
|
|
import (
|
|
"io"
|
|
|
|
"x.realy.lol/chk"
|
|
"x.realy.lol/codec"
|
|
"x.realy.lol/database/indexes/prefixes"
|
|
"x.realy.lol/database/indexes/types/fullid"
|
|
"x.realy.lol/database/indexes/types/fulltext"
|
|
"x.realy.lol/database/indexes/types/identHash"
|
|
"x.realy.lol/database/indexes/types/idhash"
|
|
"x.realy.lol/database/indexes/types/kindidx"
|
|
"x.realy.lol/database/indexes/types/letter"
|
|
"x.realy.lol/database/indexes/types/prefix"
|
|
"x.realy.lol/database/indexes/types/pubhash"
|
|
"x.realy.lol/database/indexes/types/serial"
|
|
"x.realy.lol/database/indexes/types/size"
|
|
"x.realy.lol/database/indexes/types/timestamp"
|
|
)
|
|
|
|
type Encs []codec.I
|
|
|
|
// T is a wrapper around an array of codec.I. The caller provides the Encs so they can then call
|
|
// the accessor function of the codec.I implementation.
|
|
type T struct {
|
|
Encs
|
|
}
|
|
|
|
// New creates a new indexes. The helper functions below have an encode and decode variant, the
|
|
// decode variant does not add the prefix encoder because it has been read by prefixes.Identify.
|
|
func New(encoders ...codec.I) (i *T) { return &T{encoders} }
|
|
|
|
func (t *T) MarshalWrite(w io.Writer) (err error) {
|
|
for _, e := range t.Encs {
|
|
if err = e.MarshalWrite(w); chk.E(err) {
|
|
return
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
func (t *T) UnmarshalRead(r io.Reader) (err error) {
|
|
for _, e := range t.Encs {
|
|
if err = e.UnmarshalRead(r); chk.E(err) {
|
|
return
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
func EventVars() (ser *serial.S) {
|
|
ser = serial.New()
|
|
return
|
|
}
|
|
func EventEnc(ser *serial.S) (enc *T) {
|
|
return New(prefix.New(prefixes.Event), ser)
|
|
}
|
|
func EventDec(ser *serial.S) (enc *T) {
|
|
return New(prefix.New(), ser)
|
|
}
|
|
|
|
func IdVars() (id *idhash.T, ser *serial.S) {
|
|
id = idhash.New()
|
|
ser = serial.New()
|
|
return
|
|
}
|
|
func IdEnc(id *idhash.T, ser *serial.S) (enc *T) {
|
|
return New(prefix.New(prefixes.Id), id, ser)
|
|
}
|
|
func IdSearch(id *idhash.T) (enc *T) {
|
|
return New(prefix.New(prefixes.Id), id)
|
|
}
|
|
func IdDec(id *idhash.T, ser *serial.S) (enc *T) {
|
|
return New(prefix.New(), id, ser)
|
|
}
|
|
|
|
func FullIndexVars() (t *fullid.T, p *pubhash.T, ki *kindidx.T,
|
|
ca *timestamp.T, ser *serial.S) {
|
|
t = fullid.New()
|
|
p = pubhash.New()
|
|
ki = kindidx.FromKind(0)
|
|
ca = ×tamp.T{}
|
|
ser = serial.New()
|
|
return
|
|
}
|
|
func FullIndexEnc(t *fullid.T, p *pubhash.T, ki *kindidx.T,
|
|
ca *timestamp.T, ser *serial.S) (enc *T) {
|
|
return New(prefix.New(prefixes.FullIndex), t, p, ki, ca, ser)
|
|
}
|
|
func FullIndexDec(t *fullid.T, p *pubhash.T, ki *kindidx.T,
|
|
ca *timestamp.T, ser *serial.S) (enc *T) {
|
|
return New(prefix.New(), t, p, ki, ca, ser)
|
|
}
|
|
|
|
func PubkeyVars() (p *pubhash.T, ser *serial.S) {
|
|
p = pubhash.New()
|
|
ser = serial.New()
|
|
return
|
|
}
|
|
func PubkeyEnc(p *pubhash.T, ser *serial.S) (enc *T) {
|
|
return New(prefix.New(prefixes.Pubkey), p, ser)
|
|
}
|
|
func PubkeyDec(p *pubhash.T, ser *serial.S) (enc *T) {
|
|
return New(prefix.New(), p, ser)
|
|
}
|
|
|
|
func PubkeyCreatedAtVars() (p *pubhash.T, ca *timestamp.T, ser *serial.S) {
|
|
p = pubhash.New()
|
|
ca = ×tamp.T{}
|
|
ser = serial.New()
|
|
return
|
|
}
|
|
func PubkeyCreatedAtEnc(p *pubhash.T, ca *timestamp.T, ser *serial.S) (enc *T) {
|
|
return New(prefix.New(prefixes.PubkeyCreatedAt), p, ca, ser)
|
|
}
|
|
func PubkeyCreatedAtDec(p *pubhash.T, ca *timestamp.T, ser *serial.S) (enc *T) {
|
|
return New(prefix.New(), p, ca, ser)
|
|
}
|
|
|
|
func CreatedAtVars() (ca *timestamp.T, ser *serial.S) {
|
|
ca = ×tamp.T{}
|
|
ser = serial.New()
|
|
return
|
|
}
|
|
func CreatedAtEnc(ca *timestamp.T, ser *serial.S) (enc *T) {
|
|
return New(prefix.New(prefixes.CreatedAt), ca, ser)
|
|
}
|
|
func CreatedAtDec(ca *timestamp.T, ser *serial.S) (enc *T) {
|
|
return New(prefix.New(), ca, ser)
|
|
}
|
|
|
|
func FirstSeenVars() (ser *serial.S, ts *timestamp.T) {
|
|
ts = ×tamp.T{}
|
|
ser = serial.New()
|
|
return
|
|
}
|
|
func FirstSeenEnc(ser *serial.S, ts *timestamp.T) (enc *T) {
|
|
return New(prefix.New(prefixes.FirstSeen), ser, ts)
|
|
}
|
|
func FirstSeenDec(ser *serial.S, ts *timestamp.T) (enc *T) {
|
|
return New(prefix.New(), ser, ts)
|
|
}
|
|
|
|
func KindVars() (ki *kindidx.T, ser *serial.S) {
|
|
ki = kindidx.FromKind(0)
|
|
ser = serial.New()
|
|
return
|
|
}
|
|
func KindEnc(ki *kindidx.T, ser *serial.S) (enc *T) {
|
|
return New(prefix.New(prefixes.Kind), ki, ser)
|
|
}
|
|
func KindDec(ki *kindidx.T, ser *serial.S) (enc *T) {
|
|
return New(prefix.New(), ki, ser)
|
|
}
|
|
|
|
type TagA struct {
|
|
Ki *kindidx.T
|
|
P *pubhash.T
|
|
Id *identhash.T
|
|
Ser *serial.S
|
|
}
|
|
|
|
func TagAVars() (ki *kindidx.T, p *pubhash.T, id *identhash.T, ser *serial.S) {
|
|
ki = kindidx.FromKind(0)
|
|
p = pubhash.New()
|
|
id = identhash.New()
|
|
ser = serial.New()
|
|
return
|
|
}
|
|
func TagAEnc(ki *kindidx.T, p *pubhash.T, id *identhash.T, ser *serial.S) (enc *T) {
|
|
return New(prefix.New(prefixes.TagA), ki, p, id, ser)
|
|
}
|
|
func TagADec(ki *kindidx.T, p *pubhash.T, id *identhash.T, ser *serial.S) (enc *T) {
|
|
return New(prefix.New(), ki, p, id, ser)
|
|
}
|
|
|
|
func TagEventVars() (id *idhash.T, ser *serial.S) {
|
|
id = idhash.New()
|
|
ser = serial.New()
|
|
return
|
|
}
|
|
func TagEventEnc(id *idhash.T, ser *serial.S) (enc *T) {
|
|
return New(prefix.New(prefixes.TagEvent), id, ser)
|
|
}
|
|
func TagEventDec(id *idhash.T, ser *serial.S) (enc *T) {
|
|
return New(prefix.New(), id, ser)
|
|
}
|
|
|
|
func TagPubkeyVars() (p *pubhash.T, ser *serial.S) {
|
|
p = pubhash.New()
|
|
ser = serial.New()
|
|
return
|
|
}
|
|
func TagPubkeyEnc(p *pubhash.T, ser *serial.S) (enc *T) {
|
|
return New(prefix.New(prefixes.TagPubkey), p, ser)
|
|
}
|
|
func TagPubkeyDec(p *pubhash.T, ser *serial.S) (enc *T) {
|
|
return New(prefix.New(), p, ser)
|
|
}
|
|
|
|
func TagHashtagVars() (hashtag *identhash.T, ser *serial.S) {
|
|
hashtag = identhash.New()
|
|
ser = serial.New()
|
|
return
|
|
}
|
|
func TagHashtagEnc(hashtag *identhash.T, ser *serial.S) (enc *T) {
|
|
return New(prefix.New(prefixes.TagHashtag), hashtag, ser)
|
|
}
|
|
func TagHashtagDec(hashtag *identhash.T, ser *serial.S) (enc *T) {
|
|
return New(prefix.New(), hashtag, ser)
|
|
}
|
|
|
|
func TagIdentifierVars() (ident *identhash.T, ser *serial.S) {
|
|
ident = identhash.New()
|
|
ser = serial.New()
|
|
return
|
|
}
|
|
func TagIdentifierEnc(ident *identhash.T, ser *serial.S) (enc *T) {
|
|
return New(prefix.New(prefixes.TagIdentifier), ident, ser)
|
|
}
|
|
func TagIdentifierDec(ident *identhash.T, ser *serial.S) (enc *T) {
|
|
return New(prefix.New(), ident, ser)
|
|
}
|
|
|
|
func TagLetterVars() (l *letter.T, val *identhash.T, ser *serial.S) {
|
|
l = letter.New(0)
|
|
val = identhash.New()
|
|
ser = serial.New()
|
|
return
|
|
}
|
|
func TagLetterEnc(l *letter.T, val *identhash.T, ser *serial.S) (enc *T) {
|
|
return New(prefix.New(prefixes.TagLetter), l, val, ser)
|
|
}
|
|
func TagLetterDec(l *letter.T, val *identhash.T, ser *serial.S) (enc *T) {
|
|
return New(prefix.New(), l, val, ser)
|
|
}
|
|
|
|
func TagProtectedVars() (p *pubhash.T, ser *serial.S) {
|
|
p = pubhash.New()
|
|
ser = serial.New()
|
|
return
|
|
}
|
|
func TagProtectedEnc(p *pubhash.T, ser *serial.S) (enc *T) {
|
|
return New(prefix.New(prefixes.TagProtected), p, ser)
|
|
}
|
|
func TagProtectedDec(p *pubhash.T, ser *serial.S) (enc *T) {
|
|
return New(prefix.New(), p, ser)
|
|
}
|
|
|
|
func TagNonstandardVars() (key, value *identhash.T, ser *serial.S) {
|
|
key = identhash.New()
|
|
value = identhash.New()
|
|
ser = serial.New()
|
|
return
|
|
}
|
|
func TagNonstandardEnc(key, value *identhash.T, ser *serial.S) (enc *T) {
|
|
return New(prefix.New(prefixes.TagNonstandard), key, value, ser)
|
|
}
|
|
func TagNonstandardDec(key, value *identhash.T, ser *serial.S) (enc *T) {
|
|
return New(prefix.New(), key, value, ser)
|
|
}
|
|
|
|
func FullTextWordVars() (fw *fulltext.T, pos *size.T, ser *serial.S) {
|
|
fw = fulltext.New()
|
|
pos = size.New()
|
|
ser = serial.New()
|
|
return
|
|
}
|
|
func FullTextWordEnc(fw *fulltext.T, pos *size.T, ser *serial.S) (enc *T) {
|
|
return New(prefix.New(prefixes.FulltextWord), fw, pos, ser)
|
|
}
|
|
func FullTextWordDec(fw *fulltext.T, pos *size.T, ser *serial.S) (enc *T) {
|
|
return New(prefix.New(), fw, pos, ser)
|
|
}
|
|
|
|
func LastAccessedVars() (ser *serial.S) {
|
|
ser = serial.New()
|
|
return
|
|
}
|
|
func LastAccessedEnc(ser *serial.S) (enc *T) {
|
|
return New(prefix.New(prefixes.LastAccessed), ser)
|
|
}
|
|
func LastAccessedDec(ser *serial.S) (enc *T) {
|
|
return New(prefix.New(), ser)
|
|
}
|
|
|
|
func AccessCounterVars() (ser *serial.S) {
|
|
ser = serial.New()
|
|
return
|
|
}
|
|
func AccessCounterEnc(ser *serial.S) (enc *T) {
|
|
return New(prefix.New(prefixes.AccessCounter), ser)
|
|
}
|
|
func AccessCounterDec(ser *serial.S) (enc *T) {
|
|
return New(prefix.New(), ser)
|
|
}
|