config/config.go (69 lines of code) (raw):
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package config
import (
"os"
"path/filepath"
"gopkg.in/yaml.v3"
)
const (
cfgFile = ".iceberg-go.yaml"
defaultMaxWorkers = 5
)
type Config struct {
DefaultCatalog string `yaml:"default-catalog"`
Catalogs map[string]CatalogConfig `yaml:"catalog"`
MaxWorkers int `yaml:"max-workers"`
}
type CatalogConfig struct {
CatalogType string `yaml:"type"`
URI string `yaml:"uri"`
Output string `yaml:"output"`
Credential string `yaml:"credential"`
Warehouse string `yaml:"warehouse"`
}
func LoadConfig(configPath string) []byte {
var path string
if len(configPath) > 0 {
path = configPath
} else {
homeDir, err := os.UserHomeDir()
if err != nil {
return nil
}
path = filepath.Join(homeDir, cfgFile)
}
file, err := os.ReadFile(path)
if err != nil {
return nil
}
return file
}
func ParseConfig(file []byte, catalogName string) *CatalogConfig {
var config Config
err := yaml.Unmarshal(file, &config)
if err != nil {
return nil
}
res, ok := config.Catalogs[catalogName]
if !ok {
return nil
}
return &res
}
func fromConfigFiles() Config {
dir := os.Getenv("GOICEBERG_HOME")
if dir != "" {
dir = filepath.Join(dir, cfgFile)
}
var cfg Config
if err := yaml.Unmarshal(LoadConfig(dir), &cfg); err != nil {
return cfg
}
if cfg.DefaultCatalog == "" {
cfg.DefaultCatalog = "default"
}
if cfg.MaxWorkers <= 0 {
cfg.MaxWorkers = defaultMaxWorkers
}
return cfg
}
var EnvConfig = fromConfigFiles()