Detect input format based on file name extension (#1582)

* detect inputFormat from filename

* refactor and extract func InputFormatFromFilename

* detect inputFormat only when file is provided

* add test for automatic input format detection
This commit is contained in:
ryenus
2023-03-09 10:17:19 +11:00
committed by GitHub
parent fed96f67ea
commit d30941b575
7 changed files with 260 additions and 7 deletions
+18 -2
View File
@@ -3,6 +3,7 @@ package yqlib
import (
"fmt"
"io"
"strings"
)
type InputFormat uint
@@ -25,11 +26,11 @@ type Decoder interface {
func InputFormatFromString(format string) (InputFormat, error) {
switch format {
case "yaml", "y":
case "yaml", "yml", "y":
return YamlInputFormat, nil
case "xml", "x":
return XMLInputFormat, nil
case "props", "p":
case "properties", "props", "p":
return PropertiesInputFormat, nil
case "json", "ndjson", "j":
return JsonInputFormat, nil
@@ -41,3 +42,18 @@ func InputFormatFromString(format string) (InputFormat, error) {
return 0, fmt.Errorf("unknown format '%v' please use [yaml|xml|props]", format)
}
}
func InputFormatFromFilename(filename string, defaultFormat string) string {
if filename != "" {
GetLogger().Debugf("checking filename '%s' for inputFormat", filename)
nPos := strings.LastIndex(filename, ".")
if nPos > -1 {
inputFormat := filename[nPos+1:]
GetLogger().Debugf("detected inputFormat '%s'", inputFormat)
return inputFormat
}
}
GetLogger().Debugf("using default inputFormat '%s'", defaultFormat)
return defaultFormat
}