Documentation
¶
Overview ¶
Package yaegiconf provides a simple interface to the yaegi interpreter for use as a configuration parser.
Example (Map) ¶
package main
import (
"fmt"
"log"
"github.com/kortschak/yaegiconf"
)
func main() {
var cfg map[string]interface{}
err := yaegiconf.EvalTo(&cfg, `config.Value{"int": 5, "float64": 0.1}`)
if err != nil {
log.Fatalf("failed to parse configuration: %v", err)
}
fmt.Printf("%#v\n", cfg)
}
Output: map[string]interface {}{"float64":0.1, "int":5}
Example (Nestedstruct) ¶
package main
import (
"context"
"fmt"
"log"
"reflect"
"github.com/traefik/yaegi/interp"
"github.com/kortschak/yaegiconf"
)
func main() {
type Sub struct {
S string
}
type Config struct {
N int
F float64
X Sub
}
s := interp.Exports{"xcfg/xcfg": map[string]reflect.Value{
"Value": reflect.Zero(reflect.TypeOf(&Config{})),
"Sub": reflect.Zero(reflect.TypeOf(&Sub{})),
}}
var cfg Config
err := yaegiconf.EvalExtWithContextTo(context.Background(), &cfg, `xcfg.Value{
N: 5, F: 0.1,
X: xcfg.Sub{S: "set"},
}`,
interp.Options{}, s)
if err != nil {
log.Fatalf("failed to parse configuration: %v", err)
}
fmt.Printf("%#v\n", cfg)
}
Output: yaegiconf_test.Config{N:5, F:0.1, X:yaegiconf_test.Sub{S:"set"}}
Example (String) ¶
package main
import (
"fmt"
"log"
"github.com/kortschak/yaegiconf"
)
func main() {
var cfg string
err := yaegiconf.EvalTo(&cfg, `config.Value("Configured")`)
if err != nil {
log.Fatalf("failed to parse configuration: %v", err)
}
fmt.Printf("%#v\n", cfg)
}
Output: "Configured"
Example (Struct) ¶
package main
import (
"fmt"
"log"
"github.com/kortschak/yaegiconf"
)
func main() {
type Config struct {
N int
F float64
}
var cfg Config
err := yaegiconf.EvalTo(&cfg, `config.Value{N: 5, F: 0.1}`)
if err != nil {
log.Fatalf("failed to parse configuration: %v", err)
}
fmt.Printf("%#v\n", cfg)
}
Output: yaegiconf_test.Config{N:5, F:0.1}
Example (Timeout) ¶
package main
import (
"fmt"
"github.com/kortschak/yaegiconf"
)
func main() {
type Config string
var cfg Config
err := yaegiconf.EvalTo(&cfg, `for {}; config.Value("Configured")`)
if err != nil {
fmt.Printf("failed to parse configuration: %v", err)
}
fmt.Println(cfg)
}
Output: failed to parse configuration: context deadline exceeded
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func EvalExtWithContextTo ¶
func EvalExtWithContextTo(ctx context.Context, dst interface{}, src string, options interp.Options, symbols ...interp.Exports) error
EvalExtWithContextTo evaluates the configuration source in src and stores the result of the evaluation into dst, which must be a pointer to a value.
EvalExtWithContextTo allows the user to provide a cancellation context and access to additional types and interpreter configuration.
func EvalTo ¶
EvalTo evaluates the configuration source in src and stores the result of the evaluation into dst, which must be a pointer to a value. The type of the value is accessible within the src via the label config.Value.
EvalTo will timeout if it has not completed evaluating src within ten seconds.
func EvalWithContextTo ¶
EvalWithContextTo evaluates the configuration source in src and stores the result of the evaluation into dst, which must be a pointer to a value.
EvalWithContextTo allows the user to provide a cancellation context to the evaluation.
Types ¶
This section is empty.