@@ -100,10 +100,17 @@ type ReceivePaymentsPubliclyMetadata struct {
100100
101101type PublicDistributionMetadata struct {
102102 Source string
103+ Distributions []* Distribution
103104 Quantity uint64
104105 UsdMarketValue float64
105106}
106107
108+ type Distribution struct {
109+ DestinationOwnerAccount string
110+ DestinationTokenAccount string
111+ Quantity uint64
112+ }
113+
107114func (r * Record ) IsCompleted () bool {
108115 return r .State == StateConfirmed
109116}
@@ -416,15 +423,29 @@ func (m *ReceivePaymentsPubliclyMetadata) Validate() error {
416423}
417424
418425func (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+
419432 return PublicDistributionMetadata {
420433 Source : m .Source ,
434+ Distributions : clonedDistributions ,
421435 Quantity : m .Quantity ,
422436 UsdMarketValue : m .UsdMarketValue ,
423437 }
424438}
425439
426440func (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+
427447 dst .Source = m .Source
448+ dst .Distributions = clonedDistributions
428449 dst .Quantity = m .Quantity
429450 dst .UsdMarketValue = m .UsdMarketValue
430451}
@@ -434,6 +455,45 @@ func (m *PublicDistributionMetadata) Validate() error {
434455 return errors .New ("source is required" )
435456 }
436457
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+
437497 if m .Quantity == 0 {
438498 return errors .New ("quantity is required" )
439499 }
0 commit comments