feat: dynamic data format
This commit is contained in:
@ -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)
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user