First commit | 1.0.0 | Stable

pushing repo to gitea
This commit is contained in:
Max Chaev 2025-03-14 15:23:44 +03:00
commit 1d724cd5b3
10 changed files with 216 additions and 0 deletions

10
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,10 @@
{
"spellright.language": [
"en-US-10-1."
],
"spellright.documentTypes": [
"markdown",
"latex",
"plaintext"
]
}

3
README.md Normal file
View File

@ -0,0 +1,3 @@
# go-rest-cctweaked
Small REST api manipulation program for my little experiment with CC:Tweaked minecraft mod.

70
cli/ArgsProcessor.go Normal file
View File

@ -0,0 +1,70 @@
package cli
import (
"fmt"
"os"
)
const PROJECT_NAME string = "go-rest-cctweaked"
type knownArguments int
const (
enumStart knownArguments = iota
HelpArg
SendArg
RecieveArg
WrongArg
)
var argumentsDescription = map[knownArguments]string{
HelpArg: "help - shows help message.",
SendArg: "send <url> <content> <type> - sends cctweaked message to specified restfull endpoint.",
RecieveArg: "recieve <url> - fetches current message on server",
}
func gracefullExit(msg string) {
fmt.Println(msg)
os.Exit(0)
}
func BasicInterface() {
args := os.Args[1:]
if len(args) == 0 {
gracefullExit("Can't find argument. Please refer to --help")
}
knownArg := getArgType(args[0])
switch knownArg {
case HelpArg:
processHelp()
case SendArg:
processSend(args)
case RecieveArg:
processRecieve(args)
case WrongArg:
gracefullExit("Can't find argument. Please refer to --help")
}
}
func getArgType(argument string) knownArguments {
switch argument {
case "help":
return HelpArg
case "--help":
return HelpArg
case "-h":
return HelpArg
case "send":
return SendArg
case "recieve":
return RecieveArg
default:
return WrongArg
}
}

10
cli/HelpArgument.go Normal file
View File

@ -0,0 +1,10 @@
package cli
import "fmt"
func processHelp() {
fmt.Printf("--%v help menu--\n", PROJECT_NAME)
for i := enumStart + 1; i < WrongArg; i++ {
fmt.Printf("| %v\n", argumentsDescription[knownArguments(i)])
}
}

15
cli/RecieveArgument.go Normal file
View File

@ -0,0 +1,15 @@
package cli
import (
"fmt"
"go-rest-cctweaked/networking"
)
func processRecieve(args []string) {
if len(args) < 2 {
gracefullExit("Recieve take additional url argument. Check --help")
}
body := networking.GetJsonBody(args[1])
fmt.Println(string(body))
}

25
cli/SendArgument.go Normal file
View File

@ -0,0 +1,25 @@
package cli
import (
"fmt"
"go-rest-cctweaked/networking"
"strconv"
)
func processSend(args []string) {
if len(args) < 4 {
gracefullExit("Send take additional url, content and type arguments. Check --help")
}
url := args[1]
content := args[2]
msgType, err := strconv.Atoi(args[3])
if err != nil {
panic("Failed converting message type to integer.")
}
json := networking.EncodeJson(content, msgType)
statusCode := networking.PostJsonBody(url, json)
fmt.Printf("Server responded with: %v\n", statusCode)
}

3
go.mod Normal file
View File

@ -0,0 +1,3 @@
module go-rest-cctweaked
go 1.24.1

10
main.go Normal file
View File

@ -0,0 +1,10 @@
package main
import (
"go-rest-cctweaked/cli"
)
func main() {
cli.BasicInterface()
}

39
networking/jsonFactory.go Normal file
View File

@ -0,0 +1,39 @@
package networking
import (
"encoding/json"
"fmt"
)
type cctweakedMessage struct {
Content string `json:"content"`
Msg_type int `json:"msg_type"`
}
func createMessage(messageContent string, messageType int) cctweakedMessage {
return cctweakedMessage{
messageContent,
messageType,
}
}
func DecodeJson(jsonBody []byte) cctweakedMessage {
var message cctweakedMessage
err := json.Unmarshal(jsonBody, &message)
if err != nil {
fmt.Printf("Failed to decode json from body %v\n", err)
}
return message
}
func EncodeJson(messageContent string, messageType int) []byte {
msg := createMessage(messageContent, messageType)
json, err := json.Marshal(msg)
if err != nil {
fmt.Printf("Failed to encode message in json: %v\n", err)
}
return json
}

View File

@ -0,0 +1,31 @@
package networking
import (
"bytes"
"fmt"
"io"
"net/http"
)
func GetJsonBody(url string) []byte {
req, err := http.Get(url)
if err != nil {
fmt.Printf("Failed to send request %v\n", err)
}
body, err := io.ReadAll(req.Body)
if err != nil {
fmt.Printf("Failed to read request body %v\n", err)
}
return body
}
func PostJsonBody(url string, json []byte) int {
req, err := http.Post(url, "application/json", bytes.NewBuffer(json))
if err != nil {
fmt.Printf("Failed to send post request on server: %v\n", err)
}
return req.StatusCode
}