feat: dynamic data format

This commit is contained in:
2025-05-04 13:44:35 +02:00
parent ad2d978fb4
commit 440d9fb579

View File

@ -4,8 +4,10 @@ import (
"encoding/json" "encoding/json"
"flag" "flag"
"fmt" "fmt"
"io"
"os" "os"
"os/signal" "os/signal"
"strings"
"syscall" "syscall"
"github.com/LandaMm/hsp-go/hsp" "github.com/LandaMm/hsp-go/hsp"
@ -153,7 +155,7 @@ func StartServer(addr *hsp.Adddress) {
} }
} }
func StartSession(df *hsp.DataFormat, options *client.ClientOptions) { func StartSession(options *client.ClientOptions) {
c := client.NewClient(options) c := client.NewClient(options)
rl, err := readline.New("> ") rl, err := readline.New("> ")
@ -182,22 +184,32 @@ func StartSession(df *hsp.DataFormat, options *client.ClientOptions) {
var rsp *hsp.Response var rsp *hsp.Response
switch df.Format { if strings.HasPrefix(line, "/file ") {
case hsp.DF_TEXT: filename := strings.TrimLeft(line, "/file ")
rsp, err = c.SendText(route, line)
case hsp.DF_JSON: file, err := os.Open(filename)
if err != nil {
fmt.Printf("ERR: Failed to open file '%s': %v\n", filename, err)
continue
}
buf, err := io.ReadAll(file)
if err != nil {
fmt.Printf("ERR: Failed to read from file '%s': %v\n", filename, err)
continue
}
rsp, err = c.SendBytes(route, buf)
} else if strings.HasPrefix(line, "/json ") {
var data any var data any
err = json.Unmarshal([]byte(line), &data) err = json.Unmarshal([]byte(strings.TrimLeft(line, "/json ")), &data)
if err != nil { if err != nil {
fmt.Println("ERR: Invalid JSON for request:", err) fmt.Println("ERR: Invalid JSON for request:", err)
} }
rsp, err = c.SendJson(route, data) rsp, err = c.SendJson(route, data)
case hsp.DF_BYTES: } else {
rsp, err = c.SendBytes(route, []byte(line)) rsp, err = c.SendText(route, line)
default:
fmt.Println("ERR: Unsupported data format:", df.Format)
return
} }
if err != nil { if err != nil {
@ -219,8 +231,6 @@ func main() {
var service string var service string
var address string var address string
var dataFormat string
var headerList HeaderList var headerList HeaderList
var auth string var auth string
@ -232,8 +242,6 @@ func main() {
flag.Var(&headerList, "H", "provide additional header") flag.Var(&headerList, "H", "provide additional header")
flag.StringVar(&dataFormat, "format", "text", "specify request's data format")
flag.Parse() flag.Parse()
if listening { if listening {
@ -248,24 +256,11 @@ func main() {
return return
} }
var df *hsp.DataFormat
switch dataFormat {
case hsp.DF_TEXT:
df = hsp.TextDataFormat()
case hsp.DF_JSON:
df = hsp.JsonDataFormat()
case hsp.DF_BYTES:
df = hsp.BytesDataFormat()
default:
fmt.Println("ERR: Invalid format selected for requests:", dataFormat)
}
options := &client.ClientOptions{ options := &client.ClientOptions{
Headers: headerList.Map(), Headers: headerList.Map(),
Auth: auth, Auth: auth,
BaseURL: address, BaseURL: address,
} }
StartSession(df, options) StartSession(options)
} }