code.vegaprotocol.io/vega@v0.79.0/core/execution/common/expiring_orders_snapshot.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 common 17 18 import ( 19 "code.vegaprotocol.io/vega/core/types" 20 21 "github.com/google/btree" 22 ) 23 24 func NewExpiringOrdersFromState(orders []*types.Order) *ExpiringOrders { 25 eo := &ExpiringOrders{ 26 orders: btree.New(2), 27 } 28 29 for _, o := range orders { 30 eo.Insert(o.ID, o.ExpiresAt) 31 } 32 33 return eo 34 } 35 36 func (a ExpiringOrders) Changed() bool { 37 return true 38 } 39 40 func (a *ExpiringOrders) GetState() []*types.Order { 41 orders := make([]*types.Order, 0, a.orders.Len()) 42 a.orders.Ascend(func(item btree.Item) bool { 43 oo := item.(*ordersAtTS) 44 for _, o := range oo.orders { 45 // We don't actually need the entire order to save/restore this state, just the ID and expiry 46 // we could consider changing the snapshot protos to reflect this. 47 orders = append(orders, &types.Order{ 48 ID: o, 49 ExpiresAt: oo.ts, 50 }) 51 } 52 return true 53 }) 54 55 return orders 56 }