package yqlib import ( "bufio" "bytes" "fmt" "strings" ) type FormatScenario struct { input string indent int expression string expected string description string subdescription string skipDoc bool scenarioType string expectedError string } func processFormatScenario(s FormatScenario, decoder Decoder, encoder Encoder) (string, error) { var output bytes.Buffer writer := bufio.NewWriter(&output) if decoder == nil { decoder = NewYamlDecoder(ConfiguredYamlPreferences) } log.Debugf("reading docs") inputs, err := readDocuments(strings.NewReader(s.input), "sample.yml", 0, decoder) if err != nil { return "", err } log.Debugf("done reading the documents") expression := s.expression if expression == "" { expression = "." } exp, err := getExpressionParser().ParseExpression(expression) if err != nil { return "", err } context, err := NewDataTreeNavigator().GetMatchingNodes(Context{MatchingNodes: inputs}, exp) log.Debugf("Going to print: %v", NodesToString(context.MatchingNodes)) if err != nil { return "", err } printer := NewPrinter(encoder, NewSinglePrinterWriter(writer)) err = printer.PrintResults(context.MatchingNodes) if err != nil { return "", err } writer.Flush() return output.String(), nil } func mustProcessFormatScenario(s FormatScenario, decoder Decoder, encoder Encoder) string { result, err := processFormatScenario(s, decoder, encoder) if err != nil { panic(fmt.Errorf("Bad scenario %v: %w", s.description, err)) } return result }