mirror of
https://github.com/anyproto/any-sync.git
synced 2025-06-08 14:07:02 +09:00
Marshall fixes
This commit is contained in:
parent
6dac7dcda4
commit
ec87ee56de
4 changed files with 828 additions and 60 deletions
|
@ -51,6 +51,7 @@ func (c *nonVerifiableChangeBuilder) Unmarshall(rawChange *treechangeproto.RawTr
|
|||
|
||||
type ChangeBuilder interface {
|
||||
Unmarshall(rawIdChange *treechangeproto.RawTreeChangeWithId, verify bool) (ch *Change, err error)
|
||||
UnmarshallReduced(rawIdChange *treechangeproto.RawTreeChangeWithId) (ch *Change, err error)
|
||||
Build(payload BuilderContent) (ch *Change, raw *treechangeproto.RawTreeChangeWithId, err error)
|
||||
BuildRoot(payload InitialContent) (ch *Change, raw *treechangeproto.RawTreeChangeWithId, err error)
|
||||
BuildDerivedRoot(payload InitialDerivedContent) (ch *Change, raw *treechangeproto.RawTreeChangeWithId, err error)
|
||||
|
@ -111,6 +112,26 @@ func (c *changeBuilder) Unmarshall(rawIdChange *treechangeproto.RawTreeChangeWit
|
|||
return
|
||||
}
|
||||
|
||||
func (c *changeBuilder) UnmarshallReduced(rawIdChange *treechangeproto.RawTreeChangeWithId) (ch *Change, err error) {
|
||||
if rawIdChange.GetRawChange() == nil {
|
||||
err = ErrEmptyChange
|
||||
return
|
||||
}
|
||||
|
||||
c.rawTreeCh.Signature = c.rawTreeCh.Signature[:0]
|
||||
c.rawTreeCh.Payload = c.rawTreeCh.Payload[:0]
|
||||
raw := c.rawTreeCh
|
||||
err = proto.Unmarshal(rawIdChange.GetRawChange(), raw)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
ch, err = c.unmarshallReducedRawChange(raw, rawIdChange.Id)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (c *changeBuilder) BuildRoot(payload InitialContent) (ch *Change, rawIdChange *treechangeproto.RawTreeChangeWithId, err error) {
|
||||
identity, err := payload.PrivKey.GetPublic().Marshall()
|
||||
if err != nil {
|
||||
|
@ -308,6 +329,36 @@ func (c *changeBuilder) unmarshallRawChange(raw *treechangeproto.RawTreeChange,
|
|||
return
|
||||
}
|
||||
|
||||
func (c *changeBuilder) unmarshallReducedRawChange(raw *treechangeproto.RawTreeChange, id string) (ch *Change, err error) {
|
||||
if c.isRoot(id) {
|
||||
unmarshalled := &treechangeproto.RootChange{}
|
||||
err = proto.Unmarshal(raw.Payload, unmarshalled)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
// key will be empty for derived roots
|
||||
var key crypto.PubKey
|
||||
if !unmarshalled.IsDerived {
|
||||
key, err = c.keys.PubKeyFromProto(unmarshalled.Identity)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
ch = NewChangeFromRoot(id, key, unmarshalled, raw.Signature, unmarshalled.IsDerived)
|
||||
return
|
||||
}
|
||||
unmarshalled := &treechangeproto.ReducedTreeChange{}
|
||||
err = proto.Unmarshal(raw.Payload, unmarshalled)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
ch = &Change{
|
||||
Id: id,
|
||||
PreviousIds: unmarshalled.TreeHeadIds,
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (c *changeBuilder) isRoot(id string) bool {
|
||||
if c.rootChange != nil {
|
||||
return c.rootChange.Id == id
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue