A set of stabilized interfaces for cchat implementations, joining the backend and frontend together.
Go to file
diamondburned (Forefront) 6ad5b27b27 Fixed indentation 2020-05-19 20:46:05 -07:00
text Initial API draft 2020-05-18 23:07:22 -07:00
.editorconfig Fixed indentation 2020-05-19 20:46:05 -07:00
README.md Fixed indentation 2020-05-19 20:46:05 -07:00
cchat.go RunCommand returns io.ReadCloser instead 2020-05-19 20:35:00 -07:00
go.mod Initial API draft 2020-05-18 23:07:22 -07:00

README.md

cchat

A set of stabilized interfaces for cchat implementations, joining the backend and frontend together.

Backend

Service

A service is a server with extra services implemented.

Interfaces

  • Server
  • ServerList
  • ServerIcon (optional)
  • Configurator (optional)
  • Authenticator (optional)

Authenticator

The authenticator interface allows for a multistage initial authentication API that the backend could use. Multistage is done by calling AuthenticateForm then Authenticate again forever until no errors are returned.

for {
	// Pseudo-function to render the form and return the results of those forms
	// when the user confirms it.
	outputs := renderAuthForm(svc.AuthenticateForm())

	if err := svc.Authenticate(outputs); err != nil {
		renderError(errors.Wrap(err, "Error while authenticating"))
		continue // retry
	}

	break // success
}

Commander

The commander interface allows the backend to implement custom commands to easily extend the API.

Interfaces

  • CommandCompleter (optional)

Server

A server is any entity that is usually a channel or a guild.

Interfaces

  • ServerList and/or ServerMessage
  • ServerIcon (optional)

Frontend

ServersContainer

A servers container is any type of view that displays the list of servers. It should implement a SetServers([]Server) that the backend could use to call anytime the server list changes (at all).

Typically, most frontend should implement this interface onto a tree node instead of a tree view, as servers can be infinitely nested.

This interface expects the frontend to handle its own errors.

MessagesContainer

A messages container is a view implementation that displays a list of messages live. This implements the 3 most common message events: CreateMessage, UpdateMessage and DeleteMessage. The frontend must handle all 3.

Since this container interface extends a single Server, the frontend is allowed to have multiple views. This is usually done with tabs or splits, but the backend should update them all nonetheless.