provide some logic for controlling creation of Track adapters
This commit is contained in:
parent
25357b1cb1
commit
2181c628c0
2 changed files with 17 additions and 3 deletions
|
@ -10,7 +10,7 @@ type message struct {
|
|||
*tracking.Track
|
||||
}
|
||||
|
||||
func Message(tr *tracking.Track) *message {
|
||||
func Message(tr *tracking.Track) tracking.Adapted {
|
||||
return &message{tr}
|
||||
}
|
||||
|
||||
|
@ -19,7 +19,7 @@ func MakeMessage(c *tracking.Container, h ...string) *tracking.Track {
|
|||
if h[0] == "" {
|
||||
h[0] = "scopes"
|
||||
}
|
||||
return tracking.MakeTrack(c, h...)
|
||||
return tracking.MakeTrack(c, h...).SetAdapterFactory(Message)
|
||||
}
|
||||
|
||||
func (msg *message) Domain() string {
|
||||
|
@ -33,7 +33,7 @@ func Messages(db *sql.Storage) *tracking.Container {
|
|||
}
|
||||
|
||||
func New(cont *tracking.Container, h ...string) *message {
|
||||
return Message(cont.NewTrack(h, nil))
|
||||
return tracking.Adapt[*message](cont.NewTrack(h, nil))
|
||||
}
|
||||
|
||||
// message store action handler
|
||||
|
|
|
@ -19,6 +19,9 @@ import (
|
|||
type ContFactory func(*sql.Storage) *Container
|
||||
type ItemFactory func(*Container, ...string) *Track
|
||||
|
||||
type Adapted interface{}
|
||||
type AdapterFactory func(*Track) Adapted
|
||||
|
||||
// basic track implementation
|
||||
|
||||
type Track struct {
|
||||
|
@ -27,6 +30,7 @@ type Track struct {
|
|||
TimeStamp *time.Time
|
||||
Data lib.Map
|
||||
container *Container
|
||||
adapter AdapterFactory
|
||||
}
|
||||
|
||||
func (tr *Track) TrackId() lib.Ident {
|
||||
|
@ -45,11 +49,21 @@ func MakeTrack(cont *Container, h ...string) *Track {
|
|||
tr := Track{
|
||||
Head: lib.StrMap{},
|
||||
container: cont,
|
||||
adapter: func(tr *Track) Adapted { return tr },
|
||||
}
|
||||
tr.SetHead(h...)
|
||||
return &tr
|
||||
}
|
||||
|
||||
func (tr *Track) SetAdapterFactory(af AdapterFactory) *Track {
|
||||
tr.adapter = af
|
||||
return tr
|
||||
}
|
||||
|
||||
func Adapt[T Adapted](tr *Track) T {
|
||||
return tr.adapter(tr).(T)
|
||||
}
|
||||
|
||||
func (tr *Track) SetHead(h ...string) {
|
||||
for i, k := range tr.container.HeadFields {
|
||||
if i >= len(h) {
|
||||
|
|
Loading…
Add table
Reference in a new issue