Jeffrey Smith II 5c7c34f16d
feat: replication bucket name (#440)
* chore: gofmt

* chore: update openapi gen files

* feat: add replication-bucket-name flag

* fix: fix tests

* chore: rename to replication-bucket

* feat: show remote bucket name or id

* chore: fmt fixup

* chore: update openapi to master

* chore: fix openapi generation
2022-08-18 14:21:50 -04:00

86 lines
1.9 KiB
Go

package bucket_schema
import (
"fmt"
"io"
"path/filepath"
"strconv"
"strings"
"github.com/influxdata/influx-cli/v2/api"
)
// ColumnsFormat is a type which defines the supported formats
type ColumnsFormat int
const (
ColumnsFormatAuto ColumnsFormat = iota
ColumnsFormatCSV
ColumnsFormatNDJson
ColumnsFormatJson
)
func (f *ColumnsFormat) Set(v string) error {
switch v {
case "auto":
*f = ColumnsFormatAuto
case "csv":
*f = ColumnsFormatCSV
case "ndjson":
*f = ColumnsFormatNDJson
case "json":
*f = ColumnsFormatJson
default:
return fmt.Errorf("invalid columns-format: %s, expected [csv, ndjson, json, auto]", v)
}
return nil
}
func (f ColumnsFormat) String() string {
switch f {
case ColumnsFormatAuto:
return "auto"
case ColumnsFormatCSV:
return "csv"
case ColumnsFormatNDJson:
return "ndjson"
case ColumnsFormatJson:
return "json"
default:
return "schema.Format(" + strconv.FormatInt(int64(f), 10) + ")"
}
}
// DecoderFn uses f and path to return a function capable of decoding
// measurement schema columns from a given io.Reader. If no combination
// of decoder exists for f and path, DecoderFn returns an error.
func (f ColumnsFormat) DecoderFn(path string) (ColumnsDecoderFn, error) {
ff := f
if ff == ColumnsFormatAuto {
ext := filepath.Ext(path)
switch {
case strings.EqualFold(ext, ".csv"):
ff = ColumnsFormatCSV
case strings.EqualFold(ext, ".json"):
ff = ColumnsFormatJson
case strings.EqualFold(ext, ".ndjson") || strings.EqualFold(ext, ".jsonl"):
ff = ColumnsFormatNDJson
}
}
switch ff {
case ColumnsFormatCSV:
return decodeCSV, nil
case ColumnsFormatNDJson:
return decodeNDJson, nil
case ColumnsFormatJson:
return decodeJson, nil
}
return nil, fmt.Errorf("unable to guess format for file %q", path)
}
// ColumnsDecoderFn is a function which decodes a slice of api.MeasurementSchemaColumn
// elements from r.
type ColumnsDecoderFn func(r io.Reader) ([]api.MeasurementSchemaColumn, error)