Skip to content
Snippets Groups Projects
config.go 1.23 KiB
Newer Older
  • Learn to ignore specific revisions
  • package gosdn
    
    import (
    	"github.com/google/uuid"
    	"github.com/spf13/viper"
    )
    
    // Config represents the nucleus configuration
    type Config struct {
    	BasePndUUID        uuid.UUID
    	BaseSouthBoundType int32
    	BaseSouthBoundUUID uuid.UUID
    }
    
    func getUUIDFromViper(viperKey string) (uuid.UUID, error) {
    	UUIDAsString := viper.GetString(viperKey)
    	if UUIDAsString == "" {
    		newUUID := uuid.New()
    		viper.Set(viperKey, newUUID.String())
    		viper.WriteConfig()
    
    		return newUUID, nil
    	}
    
    	parsedUUID, err := uuid.Parse(UUIDAsString)
    	if err != nil {
    		return uuid.Nil, err
    	}
    
    	return parsedUUID, nil
    }
    
    // InitializeConfig loads the configuration
    func (c *Config) InitializeConfig() error {
    	var err error
    	basePNDUUIDKey := "basePNDUUID"
    	baseSouthBoundTypeKey := "baseSouthBoundType"
    	baseSouthBoundUUIDKey := "baseSouthBoundUUID"
    
    	basePNDUUID, err := getUUIDFromViper(basePNDUUIDKey)
    	if err != nil {
    		return err
    	}
    
    	c.BasePndUUID = basePNDUUID
    
    	baseSouthBoundUUID, err := getUUIDFromViper(baseSouthBoundUUIDKey)
    	if err != nil {
    		return err
    	}
    
    	c.BaseSouthBoundUUID = baseSouthBoundUUID
    
    	c.BaseSouthBoundType = viper.GetInt32("BaseSouthBoundType")
    	if c.BaseSouthBoundType != 0 {
    		viper.Set(baseSouthBoundTypeKey, 0)
    		viper.WriteConfig()
    	}
    
    	return nil
    }