You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

67 lines
1.4 KiB

package types
import (
"sig-pub/api/pb"
"sig-pub/pkg/utils/collect"
"sort"
)
var SupportedExchanges = []pb.ExchangeType{
pb.ExchangeType_OKX,
}
func IsSupportExchange(exchange pb.ExchangeType) bool {
for _, se := range SupportedExchanges {
if se == exchange {
return true
}
}
return false
}
// 对交易所进行排序
func ExchangesSort(exchanges []pb.ExchangeType) {
if len(exchanges) < 2 {
return
}
sort.SliceStable(exchanges, func(i, j int) bool {
return exchanges[i] < exchanges[j]
})
}
type ExchangeState[T any] struct {
state []T
}
func NewExchangeState[T any]() *ExchangeState[T] {
return NewExchangeStateInit(func() (v T) { return })
}
func NewExchangeStateInit[T any](newer func() T) *ExchangeState[T] {
maxExchange := collect.MustMax(SupportedExchanges, func(e pb.ExchangeType) int32 { return int32(e) })
es := &ExchangeState[T]{
state: make([]T, maxExchange+1),
}
for _, exchange := range SupportedExchanges {
es.Set(exchange, newer())
}
return es
}
func (s *ExchangeState[T]) IsSupport(exchange pb.ExchangeType) bool {
return IsSupportExchange(exchange)
}
func (s *ExchangeState[T]) Get(exchange pb.ExchangeType) T {
return s.state[exchange]
}
func (s *ExchangeState[T]) Set(exchange pb.ExchangeType, v T) {
s.state[exchange] = v
}
func (s *ExchangeState[T]) Range(f func(exchange pb.ExchangeType, v T)) {
for _, exchange := range SupportedExchanges {
f(exchange, s.state[exchange])
}
}