@@ -11,7 +11,7 @@ import (
1111 chatpb "github.com/code-payments/code-protobuf-api/generated/go/chat/v2"
1212)
1313
14- type ChatType int
14+ type ChatType uint8
1515
1616const (
1717 ChatTypeUnknown ChatType = iota
@@ -20,15 +20,15 @@ const (
2020 // ChatTypeGroup
2121)
2222
23- type ReferenceType int
23+ type ReferenceType uint8
2424
2525const (
2626 ReferenceTypeUnknown ReferenceType = iota
2727 ReferenceTypeIntent
2828 ReferenceTypeSignature
2929)
3030
31- type PointerType int
31+ type PointerType uint8
3232
3333const (
3434 PointerTypeUnknown PointerType = iota
@@ -37,7 +37,7 @@ const (
3737 PointerTypeRead
3838)
3939
40- type Platform int
40+ type Platform uint8
4141
4242const (
4343 PlatformUnknown Platform = iota
@@ -256,6 +256,18 @@ func (r *MemberRecord) Validate() error {
256256
257257// Clone clones a member record
258258func (r * MemberRecord ) Clone () MemberRecord {
259+ var deliveryPointerCopy * MessageId
260+ if r .DeliveryPointer != nil {
261+ cloned := r .DeliveryPointer .Clone ()
262+ deliveryPointerCopy = & cloned
263+ }
264+
265+ var readPointerCopy * MessageId
266+ if r .ReadPointer != nil {
267+ cloned := r .ReadPointer .Clone ()
268+ readPointerCopy = & cloned
269+ }
270+
259271 return MemberRecord {
260272 Id : r .Id ,
261273 ChatId : r .ChatId ,
@@ -264,8 +276,8 @@ func (r *MemberRecord) Clone() MemberRecord {
264276 Platform : r .Platform ,
265277 PlatformId : r .PlatformId ,
266278
267- DeliveryPointer : r . DeliveryPointer , // todo: pointer copy safety
268- ReadPointer : r . ReadPointer , // todo: pointer copy safety
279+ DeliveryPointer : deliveryPointerCopy ,
280+ ReadPointer : readPointerCopy ,
269281
270282 IsMuted : r .IsMuted ,
271283 IsUnsubscribed : r .IsUnsubscribed ,
@@ -283,8 +295,14 @@ func (r *MemberRecord) CopyTo(dst *MemberRecord) {
283295 dst .Platform = r .Platform
284296 dst .PlatformId = r .PlatformId
285297
286- dst .DeliveryPointer = r .DeliveryPointer // todo: pointer copy safety
287- dst .ReadPointer = r .ReadPointer // todo: pointer copy safety
298+ if r .DeliveryPointer != nil {
299+ cloned := r .DeliveryPointer .Clone ()
300+ dst .DeliveryPointer = & cloned
301+ }
302+ if r .ReadPointer != nil {
303+ cloned := r .ReadPointer .Clone ()
304+ dst .ReadPointer = & cloned
305+ }
288306
289307 dst .IsMuted = r .IsMuted
290308 dst .IsUnsubscribed = r .IsUnsubscribed
@@ -350,21 +368,34 @@ func (r *MessageRecord) Validate() error {
350368
351369// Clone clones a message record
352370func (r * MessageRecord ) Clone () MessageRecord {
371+ var senderCopy * MemberId
372+ if r .Sender != nil {
373+ cloned := r .Sender .Clone ()
374+ senderCopy = & cloned
375+ }
376+
377+ dataCopy := make ([]byte , len (r .Data ))
378+ copy (dataCopy , r .Data )
379+
380+ var referenceTypeCopy * ReferenceType
381+ if r .ReferenceType != nil {
382+ cloned := * r .ReferenceType
383+ referenceTypeCopy = & cloned
384+ }
385+
353386 return MessageRecord {
354387 Id : r .Id ,
355388 ChatId : r .ChatId ,
356389 MessageId : r .MessageId ,
357390
358- Sender : r . Sender , // todo: pointer copy safety
391+ Sender : senderCopy ,
359392
360- Data : r . Data , // todo: pointer copy safety
393+ Data : dataCopy ,
361394
362- ReferenceType : r . ReferenceType , // todo: pointer copy safety
363- Reference : r .Reference , // todo: pointer copy safety
395+ ReferenceType : referenceTypeCopy ,
396+ Reference : pointer . StringCopy ( r .Reference ),
364397
365398 IsSilent : r .IsSilent ,
366-
367- // todo: finish implementing me
368399 }
369400}
370401
@@ -374,16 +405,22 @@ func (r *MessageRecord) CopyTo(dst *MessageRecord) {
374405 dst .ChatId = r .ChatId
375406 dst .MessageId = r .MessageId
376407
377- dst .Sender = r .Sender // todo: pointer copy safety
408+ if r .Sender != nil {
409+ cloned := r .Sender .Clone ()
410+ dst .Sender = & cloned
411+ }
378412
379- dst .Data = r .Data // todo: pointer copy safety
413+ dataCopy := make ([]byte , len (r .Data ))
414+ copy (dataCopy , r .Data )
415+ dst .Data = dataCopy
380416
381- dst .ReferenceType = r .ReferenceType // todo: pointer copy safety
382- dst .Reference = r .Reference // todo: pointer copy safety
417+ if r .ReferenceType != nil {
418+ cloned := * r .ReferenceType
419+ dst .ReferenceType = & cloned
420+ }
421+ dst .Reference = pointer .StringCopy (r .Reference )
383422
384423 dst .IsSilent = r .IsSilent
385-
386- // todo: finish implementing me
387424}
388425
389426// GetTimestamp gets the timestamp for a message record
0 commit comments