enbas/internal/model/instance_v2.go
Dan Anglin ccdd8b6530
fix: add a new internal printer
Add a new internal printer package for printing resources to the screen
or pager.

With the new printer in place, most of the settings such as the pager
command, colour theme, whether or not colour output is disabled, etc
are defined in one place which saves us the trouble of passing an
increasing number of parameters to an increasing number of Display
methods throughout the code base.

The old Displayer interface and associated Display methods in the
model package are removed as this is now handled by the printer.

The format functions in the utilities package has essentially been
rewritten as methods to the Printer type.

Additional changes:

- All indentation when displaying information about resources (e.g.
  statuses, instance, accounts) are removed.
- The application's build information now has colour output.
2024-06-17 18:59:20 +01:00

112 lines
4 KiB
Go

// SPDX-FileCopyrightText: 2024 Dan Anglin <d.n.i.anglin@gmail.com>
//
// SPDX-License-Identifier: GPL-3.0-or-later
package model
type InstanceV2 struct {
AccountDomain string `json:"account_domain"`
Configuration InstanceConfiguration `json:"configuration"`
Contact InstanceV2Contact `json:"contact"`
Description string `json:"description"`
DescriptionText string `json:"description_text"`
Domain string `json:"domain"`
Languages []string `json:"languages"`
Registrations InstanceV2Registrations `json:"registrations"`
Rules []InstanceRule `json:"rules"`
SourceURL string `json:"source_url"`
Terms string `json:"terms"`
TermsText string `json:"terms_text"`
Thumbnail InstanceV2Thumbnail `json:"thumbnail"`
Title string `json:"title"`
Usage InstanceV2Usage `json:"usage"`
Version string `json:"version"`
}
type InstanceConfiguration struct {
Accounts InstanceConfigurationAccounts `json:"accounts"`
Emojis InstanceConfigurationEmojis `json:"emojis"`
MediaAttachments InstanceConfigurationMediaAttachments `json:"media_attachments"`
Polls InstanceConfigurationPolls `json:"polls"`
Statuses InstanceConfigurationStatuses `json:"statuses"`
Translation InstanceV2ConfigurationTranslation `json:"translation"`
URLs InstanceV2URLs `json:"urls"`
}
type InstanceConfigurationAccounts struct {
AllowCustomCSS bool `json:"allow_custom_css"`
MaxFeaturedTags int `json:"max_featured_tags"`
MaxProfileFields int `json:"max_profile_fields"`
}
type InstanceConfigurationEmojis struct {
EmojiSizeLimit int `json:"emoji_size_limit"`
}
type InstanceConfigurationMediaAttachments struct {
ImageMatrixLimit int `json:"image_matrix_limit"`
ImageSizeLimit int `json:"image_size_limit"`
SupportedMimeTypes []string `json:"supported_mime_types"`
VideoFrameRateLimit int `json:"video_frame_rate_limit"`
VideoMatrixLimit int `json:"video_matrix_limit"`
VideoSizeLimit int `json:"video_size_limit"`
}
type InstanceConfigurationPolls struct {
MaxCharactersPerOption int `json:"max_characters_per_option"`
MaxExpiration int `json:"max_expiration"`
MaxOptions int `json:"max_options"`
MinExpiration int `json:"min_expiration"`
}
type InstanceConfigurationStatuses struct {
CharactersReservedPerURL int `json:"characters_reserved_per_url"`
MaxCharacters int `json:"max_characters"`
MaxMediaAttachments int `json:"max_media_attachments"`
SupportedMimeTypes []string `json:"supported_mime_types"`
}
type InstanceV2ConfigurationTranslation struct {
Enabled bool `json:"enabled"`
}
type InstanceV2URLs struct {
Streaming string `json:"streaming"`
}
type InstanceV2Contact struct {
Account Account `json:"account"`
Email string `json:"email"`
}
type InstanceV2Registrations struct {
ApprovalRequired bool `json:"approval_required"`
Enabled bool `json:"enabled"`
Message string `json:"message"`
}
type InstanceRule struct {
ID string `json:"id"`
Text string `json:"text"`
}
type InstanceV2Thumbnail struct {
BlurHash string `json:"blurhash"`
ThumbnailDescription string `json:"thumbnail_description"`
ThumbnailType string `json:"thumbnail_type"`
URL string `json:"url"`
Versions InstanceV2ThumbnailVersions `json:"versions"`
}
type InstanceV2ThumbnailVersions struct {
Size1URL string `json:"@1x"`
Size2URL string `json:"@2x"`
}
type InstanceV2Usage struct {
Users InstanceV2Users `json:"users"`
}
type InstanceV2Users struct {
ActiveMonth int `json:"active_month"`
}