Files
2024-07-02 06:03:35 +00:00

91 lines
1.8 KiB
Go
Executable File

package main
import (
"flag"
"fmt"
"net/http"
"os"
"github.com/YoshihikoAbe/avsproperty"
"github.com/YoshihikoAbe/eaclient"
"gopkg.in/yaml.v3"
)
var (
userAgent, srcid, model string
config struct {
Client eaclient.Client `yaml:"client"`
Services map[string]eaclient.Service `yaml:"services"`
}
)
func main() {
flag.StringVar(&userAgent, "u", "", "Override the value of the client's User-Agent header")
flag.StringVar(&srcid, "p", "", "Override the client's srcid")
flag.StringVar(&model, "m", "", "Override the client's model")
flag.Usage = func() {
fmt.Fprintf(os.Stderr, "Usage: %s [OPTIONS] CONFIG SERVICE REQUEST\nList of available options:\n", os.Args[0])
flag.PrintDefaults()
}
flag.Parse()
if len(flag.Args()) < 3 {
flag.Usage()
os.Exit(1)
}
if err := loadConfig(); err != nil {
fatal("failed to load config:", err)
}
transport := http.DefaultTransport.(*http.Transport)
transport.DisableCompression = true
transport.ForceAttemptHTTP2 = false
svcName := flag.Arg(1)
svc, ok := config.Services[flag.Arg(1)]
if !ok {
fatal("service not found:", svcName)
}
prop := &avsproperty.Property{}
if err := prop.ReadFile(flag.Arg(2)); err != nil {
fatal("failed to read property:", err)
}
resp, err := config.Client.Send(svc, prop.Root)
if err != nil {
fatal(err)
}
resp.Settings.Format = avsproperty.FormatPrettyXML
if err := resp.Write(os.Stdout); err != nil {
fatal(err)
}
}
func loadConfig() error {
b, err := os.ReadFile(flag.Arg(0))
if err != nil {
return err
}
if err := yaml.Unmarshal(b, &config); err != nil {
return err
}
if userAgent != "" {
config.Client.UserAgent = userAgent
}
if srcid != "" {
config.Client.Srcid = srcid
}
if model != "" {
config.Client.Model = model
}
return nil
}
func fatal(v ...any) {
fmt.Fprintln(os.Stderr, v...)
os.Exit(1)
}