Categorygithub.com/validatecl/naga
modulepackage
1.1.2
Repository: https://github.com/validatecl/naga.git
Documentation: pkg.go.dev

# README

Naga

Es un wrapper de viper que permite configurar una lista de variables de entrada, estableciendo la siguiente prioridad:

  • Flags
  • Variables de entorno
  • Archivos .yaml

Esta libreria recibe un string con el nombre del archivo yaml y una lista de estructuras de tipo ConfigEntry.

type ConfigEntry struct {
    VariableName string
    Description  string
    Shortcut     string
    DefaultValue interface{}
}

Esta estructura contiene los datos de las variables de configuración y se modifica cada uno de los DefaultValue según la configuración que se utilice.

Una vez configurado, se retorna un map[string]interface{} con las llaves/valores configurados y un error.

Cómo usar

Primero descargamos la libreria y sus dependencias utilizando el comando:


go get "github.com/validatecl/commons/naga"


Para utilizar naga se debe importar la librería:

import (
    "github.com/validatecl/commons/naga"
)

Luego crear un VariableTypeResolver y un FlagConfigurator:

typeResolver := naga.NewVariableTypeResolver()
flagConfigurator := naga.NewFlagConfigurator(typeResolver)

Una vez creadas las estructuras, creamos un Configurator y lo ejecutamos.

configurator := naga.NewConfigurator(flagConfigurator, typeResolver)
values, err := configurator.Configure("filename", entries)

En donde filename es el nombre del archivo, en caso de no existir, ingresar un string vacío. Y entries es la lista de ConfigEntry. Es importante señalar que los nombres en variable name de la configuración basica deben ser exactamente los mismos.

Los parametros obligatorios son: port, tracing_enabled, logging_level, metrics_enabled, timeout, uri_prefix y estos deben respetar esa sintaxis.

A continuación un ejemplo:

entries := []naga.ConfigEntry{
		{
			VariableName: "port",
			Description:  "Puerto a utilizar",
			Shortcut:     "p",
			DefaultValue: ":8080",
		},
		{
			VariableName: "logging_level",
			Description:  "Level de detalle de logs",
			Shortcut:     "l",
			DefaultValue: "info",
		},
		{
			VariableName: "tracing_enabled",
			Description:  "Especifica si se debe configurar tracing",
			Shortcut:     "t",
			DefaultValue: false,
		},
		{
			VariableName: "metrics_enabled",
			Description:  "Especifica si se debe configurar metrics",
			Shortcut:     "m",
			DefaultValue: false,
		},
		
		{
			VariableName: "timeout",
			Description:  "timeout por defecto ",
			Shortcut:     "",
			DefaultValue: 30,
		},
		{
			VariableName: "uri_prefix",
			Description:  "Prefijo de URL con version",
			DefaultValue: "/uri_prefix/v1",
		},
	}

# Functions

GetBaseCfg lee y configura la base de variables de entorno base de la api.
MapValues validate map.
NewConfigurator constructor.
NewFlagConfigurator constructor de la implementación de la interfaz.
NewVariableTypeResolver constructor.

# Constants

ErrorConfig corresponde a un error configurando la bandera.
ErrorConvert corresponde a un error en la conversion de la interface.
ErrorInt corresponde a un error convirtiendo a entero el value.
ErrorNil error cuando la interface de entrada es nil.
ErrorStruct Error en la estructira del ConfigEntry.
ErrorType corresponde a un error al ocupar el servicio ResolveType.
ErrorTypeNone error con el tipo de dato.
TypeBool Tipo de dato bool.
TypeInt Tipo de dato int.
TypeNone Tipo de dato no identificado.
TypeString Tipo de dato string.

# Structs

CfgBase configuración basica de la API.
ConfigEntry entrada de configuración.

# Interfaces

Configurator Interfaz configurador de Naga.
FlagConfigurator Interfaz que define configuración de flags.
VariableTypeResolver interface.

# Type aliases

VariableType tipo de dato para tipo de variable.