code.vegaprotocol.io/vega@v0.79.0/datanode/gateway/graphql/proposal_terms_resolver.go (about)

     1  // Copyright (C) 2023 Gobalsky Labs Limited
     2  //
     3  // This program is free software: you can redistribute it and/or modify
     4  // it under the terms of the GNU Affero General Public License as
     5  // published by the Free Software Foundation, either version 3 of the
     6  // License, or (at your option) any later version.
     7  //
     8  // This program is distributed in the hope that it will be useful,
     9  // but WITHOUT ANY WARRANTY; without even the implied warranty of
    10  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    11  // GNU Affero General Public License for more details.
    12  //
    13  // You should have received a copy of the GNU Affero General Public License
    14  // along with this program.  If not, see <http://www.gnu.org/licenses/>.
    15  
    16  package gql
    17  
    18  import (
    19  	"context"
    20  	"errors"
    21  	"time"
    22  
    23  	"code.vegaprotocol.io/vega/libs/ptr"
    24  	types "code.vegaprotocol.io/vega/protos/vega"
    25  	vega "code.vegaprotocol.io/vega/protos/vega"
    26  )
    27  
    28  var ErrUnsupportedProposalTermsChanges = errors.New("unsupported proposal terms changes")
    29  
    30  type batchProposalTermsResolver VegaResolverRoot
    31  
    32  func (r *batchProposalTermsResolver) ClosingDatetime(ctx context.Context, obj *vega.BatchProposalTerms) (int64, error) {
    33  	// this is a unix timestamp (specified by users)
    34  	// needs to convert to time then UnixNano for the Timestamp resolver to work
    35  	return time.Unix(obj.ClosingTimestamp, 0).UnixNano(), nil
    36  }
    37  
    38  type batchProposalTermsChangeResolver VegaResolverRoot
    39  
    40  func (r *batchProposalTermsChangeResolver) EnactmentDatetime(ctx context.Context, obj *vega.BatchProposalTermsChange) (*int64, error) {
    41  	var dt *int64
    42  	if obj.EnactmentTimestamp != 0 {
    43  		// this is a unix timestamp (specified by users)
    44  		// needs to convert to time then UnixNano for the Timestamp resolver to work
    45  		dt = ptr.From(time.Unix(obj.EnactmentTimestamp, 0).UnixNano())
    46  	}
    47  	return dt, nil
    48  }
    49  
    50  func (r *batchProposalTermsChangeResolver) ValidationDatetime(ctx context.Context, obj *vega.BatchProposalTermsChange) (*int64, error) {
    51  	var dt *int64
    52  	if obj.ValidationTimestamp != 0 {
    53  		// this is a unix timestamp (specified by users)
    54  		// needs to convert to time then UnixNano for the Timestamp resolver to work
    55  		dt = ptr.From(time.Unix(obj.ValidationTimestamp, 0).UnixNano())
    56  	}
    57  	return dt, nil
    58  }
    59  
    60  func (r *batchProposalTermsChangeResolver) Change(ctx context.Context, obj *vega.BatchProposalTermsChange) (ProposalChange, error) {
    61  	switch obj.Change.(type) {
    62  	case *types.BatchProposalTermsChange_UpdateMarket:
    63  		return obj.GetUpdateMarket(), nil
    64  	case *types.BatchProposalTermsChange_UpdateNetworkParameter:
    65  		return obj.GetUpdateNetworkParameter(), nil
    66  	case *types.BatchProposalTermsChange_NewMarket:
    67  		return obj.GetNewMarket(), nil
    68  	case *types.BatchProposalTermsChange_NewFreeform:
    69  		return obj.GetNewFreeform(), nil
    70  	case *types.BatchProposalTermsChange_NewAsset:
    71  		return obj.GetNewAsset(), nil
    72  	case *types.BatchProposalTermsChange_UpdateAsset:
    73  		return obj.GetUpdateAsset(), nil
    74  	case *types.BatchProposalTermsChange_CancelTransfer:
    75  		return obj.GetCancelTransfer(), nil
    76  	case *types.BatchProposalTermsChange_NewTransfer:
    77  		return obj.GetNewTransfer(), nil
    78  	case *types.BatchProposalTermsChange_NewSpotMarket:
    79  		return obj.GetNewSpotMarket(), nil
    80  	case *types.BatchProposalTermsChange_UpdateSpotMarket:
    81  		return obj.GetUpdateSpotMarket(), nil
    82  	case *types.BatchProposalTermsChange_UpdateMarketState:
    83  		return obj.GetUpdateMarketState(), nil
    84  	case *types.BatchProposalTermsChange_UpdateReferralProgram:
    85  		return obj.GetUpdateReferralProgram(), nil
    86  	case *types.BatchProposalTermsChange_UpdateVolumeDiscountProgram:
    87  		return obj.GetUpdateVolumeDiscountProgram(), nil
    88  	default:
    89  		return nil, ErrUnsupportedProposalTermsChanges
    90  	}
    91  }
    92  
    93  type proposalTermsResolver VegaResolverRoot
    94  
    95  func (r *proposalTermsResolver) ClosingDatetime(ctx context.Context, obj *types.ProposalTerms) (int64, error) {
    96  	// this is a unix timestamp (specified by users)
    97  	// needs to convert to time then UnixNano for the Timestamp resolver to work
    98  	return time.Unix(obj.ClosingTimestamp, 0).UnixNano(), nil
    99  }
   100  
   101  func (r *proposalTermsResolver) EnactmentDatetime(ctx context.Context, obj *types.ProposalTerms) (*int64, error) {
   102  	var dt *int64
   103  	if obj.EnactmentTimestamp != 0 {
   104  		// this is a unix timestamp (specified by users)
   105  		// needs to convert to time then UnixNano for the Timestamp resolver to work
   106  		dt = ptr.From(time.Unix(obj.EnactmentTimestamp, 0).UnixNano())
   107  	}
   108  	return dt, nil
   109  }
   110  
   111  func (r *proposalTermsResolver) ValidationDatetime(ctx context.Context, obj *types.ProposalTerms) (*int64, error) {
   112  	var dt *int64
   113  	if obj.ValidationTimestamp != 0 {
   114  		// this is a unix timestamp (specified by users)
   115  		// needs to convert to time then UnixNano for the Timestamp resolver to work
   116  		dt = ptr.From(time.Unix(obj.ValidationTimestamp, 0).UnixNano())
   117  	}
   118  	return dt, nil
   119  }
   120  
   121  func (r *proposalTermsResolver) Change(ctx context.Context, obj *types.ProposalTerms) (ProposalChange, error) {
   122  	switch obj.Change.(type) {
   123  	case *types.ProposalTerms_UpdateMarket:
   124  		return obj.GetUpdateMarket(), nil
   125  	case *types.ProposalTerms_UpdateNetworkParameter:
   126  		return obj.GetUpdateNetworkParameter(), nil
   127  	case *types.ProposalTerms_NewMarket:
   128  		return obj.GetNewMarket(), nil
   129  	case *types.ProposalTerms_NewAsset:
   130  		return obj.GetNewAsset(), nil
   131  	case *types.ProposalTerms_NewFreeform:
   132  		return obj.GetNewFreeform(), nil
   133  	case *types.ProposalTerms_UpdateAsset:
   134  		return obj.GetUpdateAsset(), nil
   135  	case *types.ProposalTerms_CancelTransfer:
   136  		return obj.GetCancelTransfer(), nil
   137  	case *types.ProposalTerms_NewTransfer:
   138  		return obj.GetNewTransfer(), nil
   139  	case *types.ProposalTerms_NewSpotMarket:
   140  		return obj.GetNewSpotMarket(), nil
   141  	case *types.ProposalTerms_UpdateSpotMarket:
   142  		return obj.GetUpdateSpotMarket(), nil
   143  	case *types.ProposalTerms_UpdateMarketState:
   144  		return obj.GetUpdateMarketState(), nil
   145  	case *types.ProposalTerms_UpdateReferralProgram:
   146  		return obj.GetUpdateReferralProgram(), nil
   147  	case *types.ProposalTerms_UpdateVolumeDiscountProgram:
   148  		return obj.GetUpdateVolumeDiscountProgram(), nil
   149  	default:
   150  		return nil, ErrUnsupportedProposalTermsChanges
   151  	}
   152  }