synapsecns/sanguine

View on GitHub
ethergo/listener/options.go

Summary

Maintainability
A
0 mins
Test Coverage
package listener

import (
    "context"
    "strings"
    "time"

    "github.com/ethereum/go-ethereum/rpc"
)

// Option is a functional option for chainListener.
type Option func(*chainListener)

// NewBlockHandler is a function that is called when a new block is detected.
type NewBlockHandler func(ctx context.Context, block uint64) error

// WithNewBlockHandler sets the new block handler.
func WithNewBlockHandler(handler NewBlockHandler) Option {
    return func(c *chainListener) {
        c.newBlockHandler = handler
    }
}

// WithPollInterval sets the poll interval.
func WithPollInterval(interval time.Duration) Option {
    return func(c *chainListener) {
        c.pollIntervalSetting = interval
    }
}

// WithFinalityMode sets the finality mode.
func WithFinalityMode(mode string) Option {
    return func(c *chainListener) {
        switch strings.ToLower(mode) {
        case "latest":
            c.finalityMode = rpc.LatestBlockNumber
        case "safe":
            c.finalityMode = rpc.SafeBlockNumber
        case "finalized":
            c.finalityMode = rpc.FinalizedBlockNumber
        default:
            c.finalityMode = rpc.LatestBlockNumber
        }
    }
}

// WithBlockWait sets the block wait.
func WithBlockWait(wait uint64) Option {
    return func(c *chainListener) {
        c.blockWait = wait
    }
}

// WithName sets the listener name.
func WithName(name string) Option {
    return func(c *chainListener) {
        c.name = name
        c.store.SetListenerName(name)
    }
}