experimental/config.go (49 lines of code) (raw):
package experimental
import (
"errors"
"io/ioutil"
"gopkg.in/yaml.v2"
)
type distributionStorageFilesystem struct {
RootDirectory string `yaml:"rootdirectory"`
}
type distributionStorageS3 struct {
AccessKey string `yaml:"accesskey"`
SecretKey string `yaml:"secretkey"`
Bucket string `yaml:"bucket"`
Region *string `yaml:"region"`
RegionEndpoint *string `yaml:"regionendpoint"`
RootDirectory string `yaml:"rootdirectory"`
}
type distributionStorage struct {
Filesystem *distributionStorageFilesystem `yaml:"filesystem"`
S3 *distributionStorageS3 `yaml:"s3"`
}
type distributionConfig struct {
Version string `yaml:"version"`
Storage distributionStorage `yaml:"storage"`
}
func storageFromConfig(configFile string) (storageObject, error) {
data, err := ioutil.ReadFile(configFile)
if err != nil {
return nil, err
}
config := &distributionConfig{}
err = yaml.Unmarshal(data, &config)
if err != nil {
return nil, err
}
if config.Version != "0.1" {
return nil, errors.New("only 0.1 version is supported")
}
if config.Storage.Filesystem != nil && config.Storage.S3 != nil {
return nil, errors.New("multiple storages defined")
}
if config.Storage.Filesystem != nil {
return newFilesystemStorage(config.Storage.Filesystem)
} else if config.Storage.S3 != nil {
return newS3Storage(config.Storage.S3)
} else {
return nil, errors.New("unsupported storage")
}
}