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
|
*tracking.Track
|
||||||
}
|
}
|
||||||
|
|
||||||
func Message(tr *tracking.Track) *message {
|
func Message(tr *tracking.Track) tracking.Adapted {
|
||||||
return &message{tr}
|
return &message{tr}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ func MakeMessage(c *tracking.Container, h ...string) *tracking.Track {
|
||||||
if h[0] == "" {
|
if h[0] == "" {
|
||||||
h[0] = "scopes"
|
h[0] = "scopes"
|
||||||
}
|
}
|
||||||
return tracking.MakeTrack(c, h...)
|
return tracking.MakeTrack(c, h...).SetAdapterFactory(Message)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (msg *message) Domain() string {
|
func (msg *message) Domain() string {
|
||||||
|
@ -33,7 +33,7 @@ func Messages(db *sql.Storage) *tracking.Container {
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(cont *tracking.Container, h ...string) *message {
|
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
|
// message store action handler
|
||||||
|
|
|
@ -19,6 +19,9 @@ import (
|
||||||
type ContFactory func(*sql.Storage) *Container
|
type ContFactory func(*sql.Storage) *Container
|
||||||
type ItemFactory func(*Container, ...string) *Track
|
type ItemFactory func(*Container, ...string) *Track
|
||||||
|
|
||||||
|
type Adapted interface{}
|
||||||
|
type AdapterFactory func(*Track) Adapted
|
||||||
|
|
||||||
// basic track implementation
|
// basic track implementation
|
||||||
|
|
||||||
type Track struct {
|
type Track struct {
|
||||||
|
@ -27,6 +30,7 @@ type Track struct {
|
||||||
TimeStamp *time.Time
|
TimeStamp *time.Time
|
||||||
Data lib.Map
|
Data lib.Map
|
||||||
container *Container
|
container *Container
|
||||||
|
adapter AdapterFactory
|
||||||
}
|
}
|
||||||
|
|
||||||
func (tr *Track) TrackId() lib.Ident {
|
func (tr *Track) TrackId() lib.Ident {
|
||||||
|
@ -45,11 +49,21 @@ func MakeTrack(cont *Container, h ...string) *Track {
|
||||||
tr := Track{
|
tr := Track{
|
||||||
Head: lib.StrMap{},
|
Head: lib.StrMap{},
|
||||||
container: cont,
|
container: cont,
|
||||||
|
adapter: func(tr *Track) Adapted { return tr },
|
||||||
}
|
}
|
||||||
tr.SetHead(h...)
|
tr.SetHead(h...)
|
||||||
return &tr
|
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) {
|
func (tr *Track) SetHead(h ...string) {
|
||||||
for i, k := range tr.container.HeadFields {
|
for i, k := range tr.container.HeadFields {
|
||||||
if i >= len(h) {
|
if i >= len(h) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue