64 lines
1.7 KiB
Go
64 lines
1.7 KiB
Go
package clientspace
|
|
|
|
import (
|
|
"context"
|
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace"
|
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto"
|
|
)
|
|
|
|
type rpcHandler struct {
|
|
s *service
|
|
}
|
|
|
|
func (r *rpcHandler) PullSpace(ctx context.Context, request *spacesyncproto.PullSpaceRequest) (resp *spacesyncproto.PullSpaceResponse, err error) {
|
|
sp, err := r.s.GetSpace(ctx, request.Id)
|
|
if err != nil {
|
|
if err != spacesyncproto.ErrSpaceMissing {
|
|
err = spacesyncproto.ErrUnexpected
|
|
}
|
|
return
|
|
}
|
|
|
|
description := sp.Description()
|
|
resp = &spacesyncproto.PullSpaceResponse{
|
|
SpaceHeader: description.SpaceHeader,
|
|
AclPayload: description.AclPayload,
|
|
AclPayloadId: description.AclId,
|
|
}
|
|
return
|
|
}
|
|
|
|
func (r *rpcHandler) PushSpace(ctx context.Context, req *spacesyncproto.PushSpaceRequest) (resp *spacesyncproto.PushSpaceResponse, err error) {
|
|
description := commonspace.SpaceDescription{
|
|
SpaceHeader: req.SpaceHeader,
|
|
AclId: req.AclPayloadId,
|
|
AclPayload: req.AclPayload,
|
|
}
|
|
err = r.s.AddSpace(ctx, description)
|
|
if err != nil {
|
|
return
|
|
}
|
|
resp = &spacesyncproto.PushSpaceResponse{}
|
|
return
|
|
}
|
|
|
|
func (r *rpcHandler) HeadSync(ctx context.Context, req *spacesyncproto.HeadSyncRequest) (*spacesyncproto.HeadSyncResponse, error) {
|
|
sp, err := r.s.GetSpace(ctx, req.SpaceId)
|
|
if err != nil {
|
|
return nil, spacesyncproto.ErrSpaceMissing
|
|
}
|
|
return sp.SpaceSyncRpc().HeadSync(ctx, req)
|
|
}
|
|
|
|
func (r *rpcHandler) Stream(stream spacesyncproto.DRPCSpace_StreamStream) error {
|
|
msg, err := stream.Recv()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
sp, err := r.s.GetSpace(stream.Context(), msg.SpaceId)
|
|
if err != nil {
|
|
return spacesyncproto.ErrSpaceMissing
|
|
}
|
|
return sp.SpaceSyncRpc().Stream(stream)
|
|
}
|