diff --git a/parser.go b/parser.go index 138ef00..e60b91d 100644 --- a/parser.go +++ b/parser.go @@ -8,10 +8,36 @@ import ( "github.com/shopspring/decimal" ) -var swapPrograms = map[solana.PublicKey]swapParser{ - pumpAmmProgram: pumpAmmParser, - pumpProgram: pumpParser, - meteoraDlmmProgram: metaoradlmmParser, +var defaultSwapPrograms = map[solana.PublicKey]swapParser{ + pumpAmmProgram: pumpAmmParser, + pumpProgram: pumpParser, +} + +var swapPrograms = cloneSwapPrograms(defaultSwapPrograms) + +type ParserOption func(*parserConfig) + +type parserConfig struct { + enableMeteoraDlmm bool +} + +func InitParser(opts ...ParserOption) { + cfg := parserConfig{} + for _, opt := range opts { + opt(&cfg) + } + + programs := cloneSwapPrograms(defaultSwapPrograms) + if cfg.enableMeteoraDlmm { + programs[meteoraDlmmProgram] = metaoradlmmParser + } + swapPrograms = programs +} + +func WithMeteoraDlmm() ParserOption { + return func(cfg *parserConfig) { + cfg.enableMeteoraDlmm = true + } } var actionPrograms = map[solana.PublicKey]actionParser{ @@ -118,3 +144,11 @@ func (tx *Tx) Parser() error { return nil } + +func cloneSwapPrograms(src map[solana.PublicKey]swapParser) map[solana.PublicKey]swapParser { + dst := make(map[solana.PublicKey]swapParser, len(src)) + for k, v := range src { + dst[k] = v + } + return dst +}