github.com/operator-framework/operator-lifecycle-manager@v0.30.0/pkg/controller/registry/resolver/solver/tracer.go (about)

     1  package solver
     2  
     3  import (
     4  	"fmt"
     5  	"io"
     6  )
     7  
     8  type SearchPosition interface {
     9  	Variables() []Variable
    10  	Conflicts() []AppliedConstraint
    11  }
    12  
    13  type Tracer interface {
    14  	Trace(p SearchPosition)
    15  }
    16  
    17  type DefaultTracer struct{}
    18  
    19  func (DefaultTracer) Trace(_ SearchPosition) {
    20  }
    21  
    22  type LoggingTracer struct {
    23  	Writer io.Writer
    24  }
    25  
    26  func (t LoggingTracer) Trace(p SearchPosition) {
    27  	fmt.Fprintf(t.Writer, "---\nAssumptions:\n")
    28  	for _, i := range p.Variables() {
    29  		fmt.Fprintf(t.Writer, "- %s\n", i.Identifier())
    30  	}
    31  	fmt.Fprintf(t.Writer, "Conflicts:\n")
    32  	for _, a := range p.Conflicts() {
    33  		fmt.Fprintf(t.Writer, "- %s\n", a)
    34  	}
    35  }