summaryrefslogtreecommitdiff
path: root/internal/client/api
diff options
context:
space:
mode:
Diffstat (limited to 'internal/client/api')
-rw-r--r--internal/client/api/api.go36
1 files changed, 36 insertions, 0 deletions
diff --git a/internal/client/api/api.go b/internal/client/api/api.go
index d91de46..cfc4ce9 100644
--- a/internal/client/api/api.go
+++ b/internal/client/api/api.go
@@ -92,3 +92,39 @@ func GetUserById(id snowflake.ID) tea.Cmd {
}
}
+func CreateServer(
+ name string,
+ icon string,
+ bgHexColor string,
+ fgHexColor string,
+ isPublic bool,
+) tea.Cmd {
+ return func() tea.Msg {
+ requestName := "CreateServer"
+ log.Println("request", requestName, "sent")
+ request := packet.CreateNetwork{
+ Name: name,
+ Icon: icon,
+ BgHexColor: bgHexColor,
+ FgHexColor: fgHexColor,
+ IsPublic: isPublic,
+ }
+ response, ok := <-gateway.Send(&request)
+ if !ok {
+ return fmt.Errorf("request %s timeout", requestName)
+ }
+ log.Println("request", requestName, "received response")
+
+ switch response := response.(type) {
+ case *packet.ErrorMessage:
+ return errors.New(response.Error)
+ case *packet.Users:
+ if len(response.Users) == 0 {
+ return fmt.Errorf("requested user id %v not found", id)
+ }
+ assert.Assert(len(response.Users) == 1, "server must return only one user with the matching id")
+ return UserProfileUpdate(response.Users[0])
+ }
+ return fmt.Errorf("received invalid response from server: %v", response.Type())
+ }
+}