archive: add ExtractFormatLevel function (MR 25)
Extracts the format and level from a string in the form "format:level"
This commit is contained in:
@@ -68,6 +68,43 @@ type archiveItems struct {
|
|||||||
sync.RWMutex
|
sync.RWMutex
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ExtractFormatLevel parses the given string in the format format[:level],
|
||||||
|
// where :level is one of CompressLevel consts. If level is omitted from the
|
||||||
|
// string, or if it can't be parsed, the level is set to the default level for
|
||||||
|
// the given format. If format is unknown, gzip is selected. This function is
|
||||||
|
// designed to always return something usable within this package.
|
||||||
|
func ExtractFormatLevel(s string) (format CompressFormat, level CompressLevel) {
|
||||||
|
|
||||||
|
f, l, found := strings.Cut(s, ":")
|
||||||
|
if !found {
|
||||||
|
l = "default"
|
||||||
|
}
|
||||||
|
|
||||||
|
level = CompressLevel(strings.ToLower(l))
|
||||||
|
format = CompressFormat(strings.ToLower(f))
|
||||||
|
switch level {
|
||||||
|
|
||||||
|
}
|
||||||
|
switch level {
|
||||||
|
case LevelBest:
|
||||||
|
case LevelDefault:
|
||||||
|
case LevelFast:
|
||||||
|
default:
|
||||||
|
log.Print("Unknown or no compression level set, using default")
|
||||||
|
level = LevelDefault
|
||||||
|
}
|
||||||
|
|
||||||
|
switch format {
|
||||||
|
case FormatGzip:
|
||||||
|
case FormatZstd:
|
||||||
|
default:
|
||||||
|
log.Print("Unknown or no compression format set, using gzip")
|
||||||
|
format = FormatGzip
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// Adds the given item to the archiveItems, only if it doesn't already exist in
|
// Adds the given item to the archiveItems, only if it doesn't already exist in
|
||||||
// the list. The items are kept sorted in ascending order.
|
// the list. The items are kept sorted in ascending order.
|
||||||
func (a *archiveItems) add(item archiveItem) {
|
func (a *archiveItems) add(item archiveItem) {
|
||||||
|
@@ -187,3 +187,74 @@ func TestArchiveItemsAdd(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestExtractFormatLevel(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
in string
|
||||||
|
expectedFormat CompressFormat
|
||||||
|
expectedLevel CompressLevel
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "gzip, default level",
|
||||||
|
in: "gzip:default",
|
||||||
|
expectedFormat: FormatGzip,
|
||||||
|
expectedLevel: LevelDefault,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "unknown format, level 12",
|
||||||
|
in: "pear:12",
|
||||||
|
expectedFormat: FormatGzip,
|
||||||
|
expectedLevel: LevelDefault,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "zstd, level not given",
|
||||||
|
in: "zstd",
|
||||||
|
expectedFormat: FormatZstd,
|
||||||
|
expectedLevel: LevelDefault,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "zstd, invalid level 'fast:'",
|
||||||
|
in: "zstd:fast:",
|
||||||
|
expectedFormat: FormatZstd,
|
||||||
|
expectedLevel: LevelDefault,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "zstd, best",
|
||||||
|
in: "zstd:best",
|
||||||
|
expectedFormat: FormatZstd,
|
||||||
|
expectedLevel: LevelBest,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "zstd, level empty :",
|
||||||
|
in: "zstd:",
|
||||||
|
expectedFormat: FormatZstd,
|
||||||
|
expectedLevel: LevelDefault,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "gzip, best",
|
||||||
|
in: "gzip:best",
|
||||||
|
expectedFormat: FormatGzip,
|
||||||
|
expectedLevel: LevelBest,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "none, none",
|
||||||
|
in: "",
|
||||||
|
expectedFormat: FormatGzip,
|
||||||
|
expectedLevel: LevelDefault,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, test := range tests {
|
||||||
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
format, level := ExtractFormatLevel(test.in)
|
||||||
|
if format != test.expectedFormat {
|
||||||
|
t.Fatal("format expected: ", test.expectedFormat, " got: ", format)
|
||||||
|
}
|
||||||
|
if level != test.expectedLevel {
|
||||||
|
t.Fatal("level expected: ", test.expectedLevel, " got: ", level)
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user