libs5-go/metadata/parent_link.go

91 lines
1.7 KiB
Go
Raw Permalink Normal View History

2024-01-05 13:41:17 +00:00
package metadata
import (
2024-03-01 05:18:07 +00:00
"errors"
2024-01-05 13:41:17 +00:00
"git.lumeweb.com/LumeWeb/libs5-go/encoding"
"git.lumeweb.com/LumeWeb/libs5-go/types"
2024-03-01 05:18:07 +00:00
"github.com/vmihailenco/msgpack/v5"
)
var (
_ msgpack.CustomDecoder = (*MetadataParentLink)(nil)
_ msgpack.CustomEncoder = (*MetadataParentLink)(nil)
2024-01-05 13:41:17 +00:00
)
// MetadataParentLink represents the structure for Metadata Parent Link.
type MetadataParentLink struct {
CID *encoding.CID
Type types.ParentLinkType
Role string
Signed bool
parent *MediaMetadata
}
func (m *MetadataParentLink) SetParent(parent *MediaMetadata) {
m.parent = parent
2024-01-05 13:41:17 +00:00
}
2024-03-01 05:18:07 +00:00
func (m *MetadataParentLink) EncodeMsgpack(enc *msgpack.Encoder) error {
return errors.New("Not implemented")
}
func (m *MetadataParentLink) DecodeMsgpack(dec *msgpack.Decoder) error {
mapLen, err := dec.DecodeMapLen()
if err != nil {
return err
}
cid := &encoding.CID{}
2024-03-01 05:18:07 +00:00
for i := 0; i < mapLen; i++ {
key, err := dec.DecodeInt8()
if err != nil {
return err
}
value, err := dec.DecodeInterface()
if err != nil {
return err
}
switch key {
case 0:
m.Type = types.ParentLinkType(value.(int))
case 1:
cid, err = encoding.CIDFromBytes(value.([]byte))
2024-03-01 05:18:07 +00:00
if err != nil {
return err
}
m.CID = cid
}
}
if m.Type == 0 {
m.Type = types.ParentLinkTypeUserIdentity
}
m.Signed = false
if m.parent != nil {
for _, key := range m.parent.ProvenPubKeys() {
if cid.Hash.Equals(key) {
m.Signed = true
break
}
}
}
2024-03-01 05:18:07 +00:00
return nil
}
2024-01-05 13:41:17 +00:00
// NewMetadataParentLink creates a new MetadataParentLink with the provided values.
func NewMetadataParentLink(cid *encoding.CID, role string, signed bool) *MetadataParentLink {
return &MetadataParentLink{
CID: cid,
Type: types.ParentLinkTypeUserIdentity,
Role: role,
Signed: signed,
}
}