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) SpacePull(ctx context.Context, request *spacesyncproto.SpacePullRequest) (resp *spacesyncproto.SpacePullResponse, err error) { sp, err := r.s.GetSpace(ctx, request.Id) if err != nil { if err != spacesyncproto.ErrSpaceMissing { err = spacesyncproto.ErrUnexpected } return } spaceDesc, err := sp.Description() if err != nil { err = spacesyncproto.ErrUnexpected return } resp = &spacesyncproto.SpacePullResponse{ Payload: &spacesyncproto.SpacePayload{ SpaceHeader: spaceDesc.SpaceHeader, AclPayloadId: spaceDesc.AclId, AclPayload: spaceDesc.AclPayload, SpaceSettingsPayload: spaceDesc.SpaceSettingsPayload, SpaceSettingsPayloadId: spaceDesc.SpaceSettingsId, }, } return } func (r *rpcHandler) SpacePush(ctx context.Context, req *spacesyncproto.SpacePushRequest) (resp *spacesyncproto.SpacePushResponse, err error) { description := commonspace.SpaceDescription{ SpaceHeader: req.Payload.SpaceHeader, AclId: req.Payload.AclPayloadId, AclPayload: req.Payload.AclPayload, SpaceSettingsPayload: req.Payload.SpaceSettingsPayload, SpaceSettingsId: req.Payload.SpaceSettingsPayloadId, } ctx = context.WithValue(ctx, commonspace.AddSpaceCtxKey, description) _, err = r.s.GetSpace(ctx, description.SpaceHeader.GetId()) if err != nil { return } resp = &spacesyncproto.SpacePushResponse{} 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) ObjectSyncStream(stream spacesyncproto.DRPCSpaceSync_ObjectSyncStreamStream) 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) }