#![allow(clippy::derive_partial_eq_without_eq)]
use std::str::FromStr;
use tosho_macros::AutoGetter;
use crate::helper::SubscriptionPlan;
use super::enums::{ErrorAction, Language};
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct PopupButton {
#[prost(string, optional, tag = "1")]
text: ::core::option::Option<::prost::alloc::string::String>,
}
#[derive(Clone, AutoGetter, PartialEq, ::prost::Message)]
pub struct PopupMessage {
#[prost(string, optional, tag = "1")]
#[skip_field]
subject: ::core::option::Option<::prost::alloc::string::String>,
#[prost(string, optional, tag = "2")]
#[skip_field]
body: ::core::option::Option<::prost::alloc::string::String>,
#[prost(message, optional, tag = "3")]
ok_button: ::core::option::Option<PopupButton>,
#[prost(message, optional, tag = "4")]
neutral_button: ::core::option::Option<PopupButton>,
#[prost(message, optional, tag = "5")]
cancel_button: ::core::option::Option<PopupButton>,
#[prost(enumeration = "Language", tag = "6")]
#[skip_field]
language: i32,
}
impl PopupMessage {
pub fn as_string(&self) -> String {
let mut message = String::new();
if let Some(subject) = &self.subject {
message.push_str(subject);
message.push_str(": ");
}
if let Some(body) = &self.body {
message.push_str(body);
}
message
}
}
#[derive(Clone, AutoGetter, PartialEq, ::prost::Message)]
pub struct ErrorResponse {
#[prost(enumeration = "ErrorAction", tag = "1")]
#[skip_field]
action: i32,
#[prost(message, optional, tag = "2")]
english_popup: ::core::option::Option<PopupMessage>,
#[prost(message, optional, tag = "3")]
spanish_popup: ::core::option::Option<PopupMessage>,
#[prost(string, optional, tag = "4")]
#[skip_field]
debug_message: ::core::option::Option<::prost::alloc::string::String>,
#[prost(message, repeated, tag = "5")]
other_popups: ::prost::alloc::vec::Vec<PopupMessage>,
}
impl ErrorResponse {
pub fn as_string(&self) -> String {
let popup_message = self.english_popup.as_ref().map(|popup| popup.as_string());
match self.action() {
ErrorAction::Default => {
let mut message = String::new();
message.push_str("An error occurred");
if let Some(popup_message) = popup_message {
message.push_str(&format!(": {popup_message}"));
}
if let Some(debug_message) = &self.debug_message {
message.push_str(&format!("\nDebug: {debug_message}"));
}
message
}
ErrorAction::Unauthorized => {
let mut message = String::new();
message.push_str("You are not authorized to access this resource");
if let Some(debug_message) = &self.debug_message {
message.push_str(&format!("\nDebug: {debug_message}"));
}
message
}
ErrorAction::Maintenance => {
let mut message = String::new();
message.push_str("Server is under maintenance");
if let Some(debug_message) = &self.debug_message {
message.push_str(&format!("\nDebug: {debug_message}"));
}
message
}
ErrorAction::GeoIPBlocked => {
let mut message = String::new();
message.push_str("Your request is blocked by GeoIP");
if let Some(debug_message) = &self.debug_message {
message.push_str(&format!("\nDebug: {debug_message}"));
}
message
}
ErrorAction::Unrecognized => {
let mut message = String::new();
message.push_str("An unknown error occurred");
if let Some(debug_message) = &self.debug_message {
message.push_str(&format!("\nDebug: {debug_message}"));
}
message
}
}
}
}
#[derive(Clone, AutoGetter, PartialEq, ::prost::Message)]
pub struct Banner {
#[prost(string, tag = "1")]
image: ::prost::alloc::string::String,
#[prost(uint64, optional, tag = "3")]
#[skip_field]
id: Option<u64>,
#[prost(uint32, optional, tag = "4")]
#[skip_field]
width: Option<u32>,
#[prost(uint32, optional, tag = "5")]
#[skip_field]
height: Option<u32>,
}
#[derive(Clone, AutoGetter, PartialEq, ::prost::Message)]
pub struct Tag {
#[prost(string, tag = "1")]
name: ::prost::alloc::string::String,
#[prost(string, tag = "2")]
slug: ::prost::alloc::string::String,
}
#[derive(Clone, AutoGetter, PartialEq, ::prost::Message)]
pub struct Label {
#[prost(uint64, tag = "1")]
id: u64,
#[prost(string, tag = "2")]
description: ::prost::alloc::string::String,
}
#[derive(Clone, AutoGetter, PartialEq, ::prost::Message)]
pub struct PublisherNews {
#[prost(uint64, tag = "1")]
news_id: u64,
#[prost(uint64, tag = "2")]
publisher_id: u64,
#[prost(string, tag = "3")]
name: ::prost::alloc::string::String,
#[prost(string, tag = "4")]
title: ::prost::alloc::string::String,
#[prost(string, tag = "5")]
content: ::prost::alloc::string::String,
#[prost(uint64, tag = "6")]
published_at: u64,
}
#[derive(Clone, AutoGetter, PartialEq, ::prost::Message)]
pub struct PublisherItem {
#[prost(message, optional, tag = "1")]
banner: ::core::option::Option<Banner>,
#[prost(message, optional, tag = "2")]
news: ::core::option::Option<PublisherNews>,
}
#[derive(Clone, AutoGetter, PartialEq, Copy, ::prost::Message)]
pub struct AvailableLanguages {
#[prost(enumeration = "Language", tag = "1")]
#[skip_field]
language: i32,
#[prost(uint64, tag = "2")]
titles_count: u64,
}
#[derive(Clone, AutoGetter, PartialEq, ::prost::Message)]
pub struct Languages {
#[prost(enumeration = "Language", tag = "1")]
#[skip_field]
language: i32,
#[prost(enumeration = "Language", optional, tag = "2")]
#[skip_field]
content_language: ::core::option::Option<i32>,
#[prost(enumeration = "Language", optional, tag = "3")]
#[skip_field]
content_language_secondary: ::core::option::Option<i32>,
#[prost(enumeration = "Language", optional, tag = "4")]
#[skip_field]
content_language_tertiary: ::core::option::Option<i32>,
#[prost(message, repeated, tag = "5")]
availables: ::prost::alloc::vec::Vec<AvailableLanguages>,
}
impl Languages {
pub fn content_languages(&self) -> Language {
match (
self.content_language_tertiary,
self.content_language_secondary,
self.content_language,
) {
(Some(_), _, _) => self.content_language_tertiary(),
(_, Some(_), _) => self.content_language_secondary(),
(_, _, Some(_)) => self.content_language(),
_ => Language::English,
}
}
}
#[derive(Clone, AutoGetter, PartialEq, ::prost::Message)]
pub struct SubscriptionOfferAndroid {
#[prost(string, tag = "1")]
tag: ::prost::alloc::string::String,
}
#[derive(Clone, AutoGetter, PartialEq, ::prost::Message)]
pub struct SubscriptionOfferApple {
#[prost(enumeration = "super::PlanOfferType", tag = "1")]
#[skip_field]
kind: i32,
#[prost(string, tag = "2")]
signature: ::prost::alloc::string::String,
#[prost(string, tag = "3")]
key: ::prost::alloc::string::String,
#[prost(string, tag = "4")]
nonce: ::prost::alloc::string::String,
#[prost(string, tag = "5")]
timestamp: ::prost::alloc::string::String,
#[prost(string, tag = "6")]
identifier: ::prost::alloc::string::String,
}
#[derive(Clone, AutoGetter, PartialEq, ::prost::Message)]
pub struct Plan {
#[prost(string, tag = "1")]
#[skip_field]
name: ::prost::alloc::string::String,
#[prost(string, tag = "2")]
description: ::prost::alloc::string::String,
#[prost(string, tag = "3")]
product_id: ::prost::alloc::string::String,
#[prost(message, optional, tag = "4")]
apple_offer: ::core::option::Option<SubscriptionOfferApple>,
#[prost(message, repeated, tag = "5")]
android_offer: ::prost::alloc::vec::Vec<SubscriptionOfferAndroid>,
}
impl Plan {
pub fn name(&self) -> SubscriptionPlan {
match SubscriptionPlan::from_str(&self.name) {
Ok(plan) => plan,
Err(_) => SubscriptionPlan::Basic,
}
}
}