types.go
author Mikael Berthe <mikael@lilotux.net>
Wed, 12 Apr 2017 17:36:27 +0200
changeset 85 abf0f5e40281
parent 83 adc39ae774c0
child 100 e327896577dd
permissions -rw-r--r--
Initial login support

package gondole

import (
	"time"
)

// Client contains data for a gondole client application
type Client struct {
	Name        string
	ID          string
	Secret      string
	APIBase     string
	InstanceURL string

	userToken *UserToken
}

/*
Entities:

Everything manipulated/returned by the API
*/

// Account represents a Mastodon account entity
type Account struct {
	ID             int    `json:"id"`
	Username       string `json:"username"`
	Acct           string `json:"acct"`
	DisplayName    string `json:"display_name"`
	Note           string `json:"note"`
	URL            string `json:"url"`
	Avatar         string `json:"avatar"`
	Header         string `json:"header"`
	Locked         bool   `json:"locked"`
	CreatedAt      string `json:"created_at"`
	FollowersCount int    `json:"followers_count"`
	FollowingCount int    `json:"following_count"`
	StatusesCount  int    `json:"statuses_count"`
}

// Application represents a Mastodon application entity
type Application struct {
	Name    string `json:"name"`
	Website string `json:"website"`
}

// Attachment represents a Mastodon attachement entity
type Attachment struct {
	ID         int    `json:"iD"`
	Type       string `json:"type"`
	URL        string `json:"url"`
	RemoteURL  string `json:"remote_url"`
	PreviewURL string `json:"preview_url"`
	TextURL    string `json:"text_url"`
}

/*
// Card represents a Mastodon card entity
type Card struct {
	URL         string       `json:"url"`
	Title       string       `json:"title"`
	Description string       `json:"description"`
	Image       *interface{} `json:"image"`
}
*/

// Context represents a Mastodon context entity
type Context struct {
	Ancestors   []Status `json:"ancestors"`
	Descendents []Status `json:"descendents"`
}

// Error represents a Mastodon error entity
type Error struct {
	Text string `json:"error"`
}

// Instance represents a Mastodon instance entity
type Instance struct {
	URI         string `json:"uri"`
	Title       string `json:"title"`
	Description string `json:"description"`
	Email       string `json:"email"`
}

// Mention represents a Mastodon mention entity
type Mention struct {
	ID       int    `json:"id"`
	URL      string `json:"url"`
	Username string `json:"username"`
	Acct     string `json:"acct"`
}

// Notification represents a Mastodon notification entity
type Notification struct {
	ID        int      `json:"id"`
	Type      string   `json:"type"`
	CreatedAt string   `json:"created_at"`
	Account   *Account `json:"account"`
	Status    *Status  `json:"status"`
}

// Relationship represents a Mastodon relationship entity
type Relationship struct {
	Following  bool `json:"following"`
	FollowedBy bool `json:"followed_by"`
	Blocking   bool `json:"blocking"`
	Muting     bool `json:"muting"`
	Requested  bool `json:"requested"`
}

// Report represents a Mastodon report entity
type Report struct {
	ID          int    `json:"iD"`
	ActionTaken string `json:"action_taken"`
}

// Results represents a Mastodon results entity
type Results struct {
	Accounts []Account `json:"accounts"`
	Statuses []Status  `json:"statuses"`
	Hashtags []string  `json:"hashtags"`
}

// Status represents a Mastodon status entity
type Status struct {
	ID                 int          `json:"id"`
	URI                string       `json:"uri"`
	URL                string       `json:"url"`
	Account            *Account     `json:"account"`
	InReplyToID        int          `json:"in_reply_to_id"`
	InReplyToAccountID int          `json:"in_reply_to_account_id"`
	Reblog             *Status      `json:"reblog"`
	Content            string       `json:"content"`
	CreatedAt          time.Time    `json:"created_at"`
	ReblogsCount       int          `json:"reblogs_count"`
	FavouritesCount    int          `json:"favourites_count"`
	Reblogged          bool         `json:"reblogged"`
	Favourited         bool         `json:"favourited"`
	Sensitive          bool         `json:"sensitive"`
	SpoilerText        string       `json:"spoiler_text"`
	Visibility         string       `json:"visibility"`
	MediaAttachments   []Attachment `json:"media_attachments"`
	Mentions           []Mention    `json:"mentions"`
	Tags               []Tag        `json:"tags"`
	Application        Application  `json:"application"`
}

// Tag represents a Mastodon tag entity
type Tag struct {
	Name string `json:"name"`
	URL  string `json:"url"`
}