@@ -100,10 +100,17 @@ type ReceivePaymentsPubliclyMetadata struct {
100
100
101
101
type PublicDistributionMetadata struct {
102
102
Source string
103
+ Distributions []* Distribution
103
104
Quantity uint64
104
105
UsdMarketValue float64
105
106
}
106
107
108
+ type Distribution struct {
109
+ DestinationOwnerAccount string
110
+ DestinationTokenAccount string
111
+ Quantity uint64
112
+ }
113
+
107
114
func (r * Record ) IsCompleted () bool {
108
115
return r .State == StateConfirmed
109
116
}
@@ -416,15 +423,29 @@ func (m *ReceivePaymentsPubliclyMetadata) Validate() error {
416
423
}
417
424
418
425
func (m * PublicDistributionMetadata ) Clone () PublicDistributionMetadata {
426
+ clonedDistributions := make ([]* Distribution , len (m .Distributions ))
427
+ for i , distribution := range m .Distributions {
428
+ cloned := distribution .Clone ()
429
+ clonedDistributions [i ] = & cloned
430
+ }
431
+
419
432
return PublicDistributionMetadata {
420
433
Source : m .Source ,
434
+ Distributions : clonedDistributions ,
421
435
Quantity : m .Quantity ,
422
436
UsdMarketValue : m .UsdMarketValue ,
423
437
}
424
438
}
425
439
426
440
func (m * PublicDistributionMetadata ) CopyTo (dst * PublicDistributionMetadata ) {
441
+ clonedDistributions := make ([]* Distribution , len (m .Distributions ))
442
+ for i , distribution := range m .Distributions {
443
+ cloned := distribution .Clone ()
444
+ clonedDistributions [i ] = & cloned
445
+ }
446
+
427
447
dst .Source = m .Source
448
+ dst .Distributions = clonedDistributions
428
449
dst .Quantity = m .Quantity
429
450
dst .UsdMarketValue = m .UsdMarketValue
430
451
}
@@ -434,6 +455,45 @@ func (m *PublicDistributionMetadata) Validate() error {
434
455
return errors .New ("source is required" )
435
456
}
436
457
458
+ if len (m .Distributions ) == 0 {
459
+ return errors .New ("distributions are required" )
460
+ }
461
+ for _ , distribution := range m .Distributions {
462
+ if err := distribution .Validate (); err != nil {
463
+ return err
464
+ }
465
+ }
466
+
467
+ if m .Quantity == 0 {
468
+ return errors .New ("quantity is required" )
469
+ }
470
+
471
+ return nil
472
+ }
473
+
474
+ func (m * Distribution ) Clone () Distribution {
475
+ return Distribution {
476
+ DestinationOwnerAccount : m .DestinationOwnerAccount ,
477
+ DestinationTokenAccount : m .DestinationTokenAccount ,
478
+ Quantity : m .Quantity ,
479
+ }
480
+ }
481
+
482
+ func (m * Distribution ) CopyTo (dst * Distribution ) {
483
+ dst .DestinationOwnerAccount = m .DestinationOwnerAccount
484
+ dst .DestinationTokenAccount = m .DestinationTokenAccount
485
+ dst .Quantity = m .Quantity
486
+ }
487
+
488
+ func (m * Distribution ) Validate () error {
489
+ if len (m .DestinationOwnerAccount ) == 0 {
490
+ return errors .New ("destination owner account is required" )
491
+ }
492
+
493
+ if len (m .DestinationTokenAccount ) == 0 {
494
+ return errors .New ("destination token account is required" )
495
+ }
496
+
437
497
if m .Quantity == 0 {
438
498
return errors .New ("quantity is required" )
439
499
}
0 commit comments