Diffstat (limited to 'config')
| -rw-r--r-- | config/config.go | 107 | ||||
| -rw-r--r-- | config/config.json | 31 |
2 files changed, 0 insertions, 138 deletions
diff --git a/config/config.go b/config/config.go deleted file mode 100644 index 6d37904..0000000 --- a/config/config.go +++ /dev/null @@ -1,107 +0,0 @@ -package config - -import ( - "encoding/json" - "fmt" - "os" - - "github.com/go-playground/validator/v10" -) - -type Config struct { - Input InputConfig `json:"Input" validate:"required"` - Output OutputConfig `json:"Output" validate:"required"` -} - -type InputConfig struct { - Storage StorageConfig `json:"Storage" validate:"required"` -} - -type OutputConfig struct { - Storage StorageConfig `json:"Storage" validate:"required"` - Quality int `json:"Quality" validate:"required,min=1,max=100"` - Size SizeConfig `json:"Size" validate:"required"` -} - -type StorageConfig struct { - Type string `json:"Type" validate:"required,oneof=b2 local"` - Config any `json:"Config" validate:"required"` -} - -func (sc *StorageConfig) UnmarshalJSON(data []byte) error { - var tmp struct { - Type string `json:"Type"` - Config json.RawMessage `json:"Config"` - } - - if err := json.Unmarshal(data, &tmp); err != nil { - return err - } - - sc.Type = tmp.Type - - switch tmp.Type { - case "b2": - var b2Config B2Config - if err := json.Unmarshal(tmp.Config, &b2Config); err != nil { - return fmt.Errorf("unmarshal B2Config: %w", err) - } - sc.Config = b2Config - case "local": - var localConfig LocalConfig - if err := json.Unmarshal(tmp.Config, &localConfig); err != nil { - return fmt.Errorf("unmarshal LocalConfig: %w", err) - } - sc.Config = localConfig - default: - return fmt.Errorf("unsupported storage type: %s", tmp.Type) - } - - return nil -} - -type B2Config struct { - BucketName string `json:"BucketName" validate:"required,min=1"` - Region string `json:"Region" validate:"required,min=1"` - Prefix string `json:"Prefix"` - KeyID string `json:"KeyID"` - ApplicationKey string `json:"ApplicationKey"` -} - -type LocalConfig struct { - Path string `json:"Path" validate:"required,min=1"` -} - -type SizeConfig struct { - MaxWidth int `json:"MaxWidth" validate:"required,min=0"` - MaxHeight int `json:"MaxHeight" validate:"required,min=0"` -} - -func LoadConfig(path string, config *Config) error { - fileBytes, err := os.ReadFile(path) - if err != nil { - return err - } - - expandedFileBytes := []byte(os.ExpandEnv(string(fileBytes))) - - if err = json.Unmarshal(expandedFileBytes, config); err != nil { - return err - } - - return nil -} - -func InitConfig(path string) (*Config, error) { - config := &Config{} - if err := LoadConfig(path, config); err != nil { - return nil, err - } - - validate := validator.New(validator.WithRequiredStructEnabled()) - if err := validate.Struct(config); err != nil { - return nil, err - } - - return config, nil -} diff --git a/config/config.json b/config/config.json deleted file mode 100644 index d818107..0000000 --- a/config/config.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "Input": { - "Storage": { - "Type": "b2", - "Config": { - "BucketName": "sayana-photos", - "Region": "eu-central-003", - "Prefix": "full/", - "KeyID": "${B2_KEY_ID}", - "ApplicationKey": "${B2_APPLICATION_KEY}" - } - } - }, - "Output": { - "Storage": { - "Type": "b2", - "Config": { - "BucketName": "sayana-photos", - "Region": "eu-central-003", - "Prefix": "thumbnails/", - "KeyID": "${B2_KEY_ID}", - "ApplicationKey": "${B2_APPLICATION_KEY}" - } - }, - "Quality": 80, - "Size": { - "MaxWidth": 1280, - "MaxHeight": 0 - } - } -}
\ No newline at end of file |