github.com/TrueBlocks/trueblocks-core/src/apps/chifra@v0.0.0-20241022031540-b362680128f7/pkg/rpc/provider/query.go (about)

     1  package provider
     2  
     3  import (
     4  	"strings"
     5  
     6  	"github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/base"
     7  	"github.com/TrueBlocks/trueblocks-core/src/apps/chifra/pkg/identifiers"
     8  )
     9  
    10  type Query struct {
    11  	Chain      string
    12  	Addresses  []base.Address
    13  	BlockRange []identifiers.Identifier
    14  	// Etherscan calls them "modules"
    15  	Resources   []string
    16  	StartPage   uint
    17  	StartPageId string
    18  	PerPage     uint
    19  }
    20  
    21  func (q *Query) InRange(bn base.Blknum) (bool, error) {
    22  	if len(q.BlockRange) == 0 {
    23  		return true, nil
    24  	}
    25  
    26  	br := q.BlockRange[0]
    27  	if strings.Contains(br.Orig, "-") && !strings.Contains(br.Orig, ":") {
    28  		return br.Start.Number <= uint(bn) && uint(bn) <= br.End.Number, nil
    29  	}
    30  
    31  	if blockNums, err := br.ResolveBlocks(q.Chain); err != nil {
    32  		return false, err
    33  	} else {
    34  		for _, num := range blockNums {
    35  			if num == bn {
    36  				return true, nil
    37  			}
    38  		}
    39  		return false, nil
    40  	}
    41  }
    42  
    43  func (q *Query) Dup() *Query {
    44  	return &Query{
    45  		Chain:       q.Chain,
    46  		Addresses:   q.Addresses,
    47  		BlockRange:  q.BlockRange,
    48  		Resources:   q.Resources,
    49  		StartPage:   q.StartPage,
    50  		StartPageId: q.StartPageId,
    51  		PerPage:     q.PerPage,
    52  	}
    53  }