1
0
Fork 0
mirror of https://github.com/anyproto/any-sync.git synced 2025-06-09 09:35:03 +09:00
any-sync/acl/acltree/threadutility.go
2022-07-13 19:17:50 +03:00

42 lines
968 B
Go

package acltree
import (
"github.com/anytypeio/go-anytype-infrastructure-experiments/acl/account"
"github.com/anytypeio/go-anytype-infrastructure-experiments/acl/thread"
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys"
)
func BuildThreadWithACL(
acc *account.AccountData,
build func(builder ChangeBuilder) error,
create func(change *thread.RawChange) (thread.Thread, error)) (thread.Thread, error) {
bld := newChangeBuilder()
bld.Init(
newACLState(acc.Identity, acc.EncKey, keys.NewEd25519Decoder()),
&Tree{},
acc)
err := build(bld)
if err != nil {
return nil, err
}
bld.SetMakeSnapshot(true)
change, payload, err := bld.BuildAndApply()
if err != nil {
return nil, err
}
rawChange := &thread.RawChange{
Payload: payload,
Signature: change.Signature(),
Id: change.CID(),
}
thr, err := create(rawChange)
if err != nil {
return nil, err
}
thr.SetHeads([]string{change.CID()})
return thr, nil
}