package traverse // EventStage indicates whether a TraversalEvent is fired at the start or // completion of processing a Referral. type EventStage int // Event stage constants. const ( EventStart EventStage = iota // fired when a Referral is about to be queried EventComplete // fired after the Response has been produced ) // TraversalEvent carries context for a single traversal event delivered to // the OnEvent hook. type TraversalEvent struct { // Stage is EventStart or EventComplete. Stage EventStage // Result carries the Referral and (for EventComplete) the Response. Result TraversalResult // IsResolve is true when the event relates to a nameserver address // resolution sub-traversal rather than the main traversal. IsResolve bool } // EventHandler is the function signature for traversal event callbacks. type EventHandler func(TraversalEvent) // TraverserHooks holds the optional event callback for a Traverser. // Assigning OnEvent enables progress and result notifications. type TraverserHooks struct { OnEvent EventHandler } func (h *TraverserHooks) emit(stage EventStage, result TraversalResult, isResolve bool) { if h == nil || h.OnEvent == nil { return } h.OnEvent(TraversalEvent{ Stage: stage, Result: result, IsResolve: isResolve, }) }