Add is_variant methods to all enums
This commit is contained in:
		
							parent
							
								
									1081273571
								
							
						
					
					
						commit
						6f5a2a5e90
					
				| 
						 | 
				
			
			@ -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"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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")]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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 },
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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")]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue