Add is_variant methods to all enums

This commit is contained in:
D. Scott Boggs 2023-02-01 15:06:37 -05:00 committed by Scott Boggs
parent 1081273571
commit 6f5a2a5e90
10 changed files with 38 additions and 16 deletions

View File

@ -48,6 +48,7 @@ static_assertions = "1.1.0"
percent-encoding = "2.2.0"
thiserror = "1.0.38"
derive_deref = "1.1.1"
is_variant = "1.0.0"
[dependencies.parse_link_header]
version = "0.3.3"

View File

@ -13,6 +13,7 @@ edition.workspace = true
futures = "0.3.25"
thiserror = "1"
static_assertions = "1"
is_variant = "1.0.0"
[dependencies.log]
version = "0.4"

View File

@ -1,6 +1,7 @@
//! Module containing everything related to media attachements.
use crate::AttachmentId;
use is_variant::IsVariant;
use serde::{Deserialize, Serialize};
/// A struct representing a media attachment.
@ -62,7 +63,7 @@ pub struct ImageDetails {
}
/// The type of media attachment.
#[derive(Debug, Deserialize, Serialize, Clone, Copy, PartialEq, Eq)]
#[derive(Debug, Deserialize, Serialize, Clone, Copy, PartialEq, Eq, IsVariant)]
pub enum MediaType {
/// An image.
#[serde(rename = "image")]

View File

@ -1,5 +1,7 @@
use is_variant::IsVariant;
/// Error type
#[derive(Debug, thiserror::Error)]
#[derive(Debug, thiserror::Error, IsVariant)]
pub enum Error {
#[error("unrecognized visibility '{invalid}'")]
VisibilityParsingError { invalid: String },

View File

@ -1,7 +1,8 @@
use crate::{notification::Notification, status::Status};
use is_variant::IsVariant;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Deserialize, Serialize)]
#[derive(Debug, Clone, Deserialize, Serialize, IsVariant)]
/// Events that come from the /streaming/user API call
pub enum Event {
/// Update event

View File

@ -1,3 +1,4 @@
use is_variant::IsVariant;
use serde::{de::Visitor, Deserialize, Deserializer, Serialize};
use time::{serde::iso8601, OffsetDateTime};
@ -54,7 +55,7 @@ pub struct Filter {
}
/// Represents the various types of Filter contexts
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, IsVariant)]
#[serde(rename_all = "lowercase")]
pub enum FilterContext {
/// Represents the "home" context
@ -73,7 +74,7 @@ pub enum FilterContext {
///
/// Please note that the spec requests that any unknown value be interpreted
/// as "warn".
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, IsVariant)]
#[serde(rename_all = "lowercase")]
pub enum Action {
/// Indicates filtered toots should show up, but with a warning

View File

@ -3,6 +3,7 @@
use crate::NotificationId;
use super::{account::Account, status::Status};
use is_variant::IsVariant;
use serde::{Deserialize, Serialize};
use time::{serde::iso8601, OffsetDateTime};
@ -25,7 +26,7 @@ pub struct Notification {
}
/// The type of notification.
#[derive(Debug, Clone, Copy, Deserialize, Serialize, PartialEq, Eq)]
#[derive(Debug, Clone, Copy, Deserialize, Serialize, PartialEq, Eq, IsVariant)]
#[serde(rename_all = "lowercase")]
pub enum NotificationType {
/// Someone mentioned the application client in another status.

View File

@ -1,8 +1,9 @@
use is_variant::IsVariant;
use serde::Deserialize;
use serde::Serialize;
/// The visibility of a status.
#[derive(Clone, Copy, Debug, Deserialize, Serialize, PartialEq, Eq)]
#[derive(Clone, Copy, Debug, Deserialize, Serialize, PartialEq, Eq, IsVariant)]
#[serde(rename_all = "lowercase")]
pub enum Visibility {
/// A Direct message to a user
@ -36,3 +37,17 @@ impl std::str::FromStr for Visibility {
}
}
}
#[cfg(test)]
mod tests {
use std::str::FromStr;
use super::*;
#[test]
fn test_from_str() {
assert!(Visibility::from_str("invalid")
.expect_err("parsed invalid?")
.is_visibility_parsing_error());
}
}

View File

@ -3,6 +3,7 @@ use std::{error, fmt, io::Error as IoError, num::TryFromIntError};
#[cfg(feature = "env")]
use envy::Error as EnvyError;
use is_variant::IsVariant;
use reqwest::{header::ToStrError as HeaderStrError, Error as HttpError, StatusCode};
use serde::Deserialize;
use serde_json::Error as SerdeError;
@ -17,7 +18,7 @@ use url::ParseError as UrlError;
pub type Result<T> = ::std::result::Result<T, Error>;
/// enum of possible errors encountered using the mastodon API.
#[derive(Debug, thiserror::Error)]
#[derive(Debug, thiserror::Error, IsVariant)]
pub enum Error {
/// Error from the Mastodon API. This typically means something went
/// wrong with your authentication or data.

View File

@ -6,6 +6,7 @@ use std::{
str::FromStr,
};
use is_variant::IsVariant;
use serde::ser::{Serialize, Serializer};
use crate::errors::Error;
@ -257,19 +258,16 @@ impl fmt::Display for Scopes {
/// Permission scope of the application.
/// [Details on what each permission provides][1]
/// [1]: https://github.com/tootsuite/documentation/blob/master/Using-the-API/OAuth-details.md)
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize)]
enum Scope {
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, IsVariant)]
#[serde(rename_all = "lowercase")]
pub enum Scope {
/// Read only permissions.
#[serde(rename = "read")]
Read(Option<Read>),
/// Write only permissions.
#[serde(rename = "write")]
Write(Option<Write>),
/// Only permission to add and remove followers.
#[serde(rename = "follow")]
Follow,
/// Push permissions
#[serde(rename = "push")]
Push,
}
@ -355,7 +353,7 @@ impl Default for Scope {
}
/// Represents the granular "read:___" oauth scopes
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, IsVariant)]
pub enum Read {
/// Accounts
#[serde(rename = "accounts")]
@ -450,7 +448,7 @@ impl fmt::Display for Read {
}
/// Represents the granular "write:___" oauth scopes
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, IsVariant)]
pub enum Write {
/// Accounts
#[serde(rename = "accounts")]