package selector

import (
	"context"
)

type peerKey struct{}

// Peer contains the information of the peer for an RPC, such as the address
// and authentication information.
type Peer struct {
	// node is the peer node.
	Node Node
}

// NewPeerContext creates a new context with peer information attached.
func NewPeerContext(ctx context.Context, p *Peer) context.Context {
	return context.WithValue(ctx, peerKey{}, p)
}

// FromPeerContext returns the peer information in ctx if it exists.
func FromPeerContext(ctx context.Context) (p *Peer, ok bool) {
	p, ok = ctx.Value(peerKey{}).(*Peer)
	return
}