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 }