diff options
Diffstat (limited to 'internal/client/api/api.go')
| -rw-r--r-- | internal/client/api/api.go | 36 |
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()) + } +} |
