go-ethereum/portalnetwork/storage/content_storage.go
Chen Kai eb3206b1e1 feat:beacon network test
Signed-off-by: Chen Kai <281165273grape@gmail.com>
2024-04-15 09:37:39 +08:00

48 lines
1,009 B
Go

package storage
import "fmt"
var ErrContentNotFound = fmt.Errorf("content not found")
type ContentType byte
type ContentKey struct {
selector ContentType
data []byte
}
func NewContentKey(selector ContentType, data []byte) *ContentKey {
return &ContentKey{
selector: selector,
data: data,
}
}
func (c *ContentKey) Encode() []byte {
res := make([]byte, 0, len(c.data)+1)
res = append(res, byte(c.selector))
res = append(res, c.data...)
return res
}
type ContentStorage interface {
Get(contentKey []byte, contentId []byte) ([]byte, error)
Put(contentKey []byte, contentId []byte, content []byte) error
}
type MockStorage struct {
Db map[string][]byte
}
func (m *MockStorage) Get(contentKey []byte, contentId []byte) ([]byte, error) {
if content, ok := m.Db[string(contentId)]; ok {
return content, nil
}
return nil, ErrContentNotFound
}
func (m *MockStorage) Put(contentKey []byte, contentId []byte, content []byte) error {
m.Db[string(contentId)] = content
return nil
}