Skip to content
Snippets Groups Projects
config.go 2.12 KiB
Newer Older
  • Learn to ignore specific revisions
  • Christian Pointner's avatar
    Christian Pointner committed
    //
    //  tank
    //
    //  Import and Playlist Daemon for autoradio project
    //
    //
    
    //  Copyright (C) 2017-2018 Christian Pointner <equinox@helsinki.at>
    
    Christian Pointner's avatar
    Christian Pointner committed
    //
    //  This file is part of tank.
    //
    //  tank is free software: you can redistribute it and/or modify
    //  it under the terms of the GNU General Public License as published by
    //  the Free Software Foundation, either version 3 of the License, or
    //  any later version.
    //
    //  tank is distributed in the hope that it will be useful,
    //  but WITHOUT ANY WARRANTY; without even the implied warranty of
    //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    //  GNU General Public License for more details.
    //
    //  You should have received a copy of the GNU General Public License
    //  along with tank. If not, see <http://www.gnu.org/licenses/>.
    //
    
    package store
    
    
    import (
    	"errors"
    	"strings"
    )
    
    type AudioFormat int
    
    const (
    	FormatWAV AudioFormat = iota
    	FormatFlac
    )
    
    func (f AudioFormat) String() string {
    	switch f {
    	case FormatWAV:
    		return "wav"
    	case FormatFlac:
    		return "flac"
    	}
    	return "unknown"
    }
    
    func (f *AudioFormat) fromString(str string) error {
    	switch strings.ToLower(str) {
    	case "wav":
    		*f = FormatWAV
    	case "flac":
    		*f = FormatFlac
    	default:
    		return errors.New("invalid audio format: '" + str + "'")
    	}
    	return nil
    }
    
    func (f AudioFormat) MarshalText() (data []byte, err error) {
    	data = []byte(f.String())
    	return
    }
    
    func (f *AudioFormat) UnmarshalText(data []byte) (err error) {
    	return f.fromString(string(data))
    }
    
    func (f AudioFormat) Extension() string {
    	switch f {
    	case FormatWAV:
    		return ".wav"
    	case FormatFlac:
    		return ".flac"
    	}
    	return ""
    }
    
    type AudioConfig struct {
    	Format     AudioFormat `json:"format" yaml:"format" toml:"format"`
    	SampleRate uint        `json:"sample-rate" yaml:"sample-rate" toml:"sample-rate"`
    }
    
    
    type DBConfig struct {
    	Type       string `json:"type" yaml:"type" toml:"type"`
    	Connection string `json:"connection" yaml:"connection" toml:"connection"`
    }
    
    
    Christian Pointner's avatar
    Christian Pointner committed
    type Config struct {
    
    	BasePath string      `json:"path" yaml:"path" toml:"path"`
    	Audio    AudioConfig `json:"audio" yaml:"audio" toml:"audio"`
    	DB       DBConfig    `json:"db" yaml:"db" toml:"db"`