fedimovies/src/mastodon_api/instance/types.rs

57 lines
1.8 KiB
Rust
Raw Normal View History

use std::collections::HashMap;
2021-04-09 00:22:17 +00:00
use serde::Serialize;
use crate::config::Config;
use crate::mastodon_api::MASTODON_API_VERSION;
2021-04-09 00:22:17 +00:00
#[derive(Serialize)]
pub struct InstanceInfo {
2021-04-09 00:22:17 +00:00
uri: String,
title: String,
short_description: String,
description: String,
version: String,
registrations: bool,
login_message: String,
2022-02-08 21:04:28 +00:00
post_character_limit: usize,
blockchain_id: Option<String>,
blockchain_explorer_url: Option<String>,
blockchain_contract_address: Option<String>,
blockchain_info: Option<HashMap<String, String>>,
2021-04-09 00:22:17 +00:00
ipfs_gateway_url: Option<String>,
}
fn get_full_api_version(version: &str) -> String {
format!(
"{0} (compatible; Mitra {1})",
MASTODON_API_VERSION,
version,
)
}
impl From<&Config> for InstanceInfo {
2021-04-09 00:22:17 +00:00
fn from(config: &Config) -> Self {
Self {
uri: config.instance().host(),
2021-04-09 00:22:17 +00:00
title: config.instance_title.clone(),
short_description: config.instance_short_description.clone(),
description: config.instance_description.clone(),
version: get_full_api_version(&config.version),
2021-11-13 17:37:31 +00:00
registrations: config.registrations_open,
2021-04-09 00:22:17 +00:00
login_message: config.login_message.clone(),
2022-02-08 21:04:28 +00:00
post_character_limit: config.post_character_limit,
blockchain_id: config.blockchain.as_ref()
.map(|val| val.chain_id.clone()),
blockchain_explorer_url: config.blockchain.as_ref()
.and_then(|val| val.explorer_url.clone()),
blockchain_contract_address: config.blockchain.as_ref()
.map(|val| val.contract_address.clone()),
blockchain_info: config.blockchain.as_ref()
.and_then(|val| val.chain_info.clone()),
2021-04-09 00:22:17 +00:00
ipfs_gateway_url: config.ipfs_gateway_url.clone(),
}
}
}