summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorD. Scott Boggs <scott@tams.tech>2023-02-01 15:06:37 -0500
committerD. Scott Boggs <scott@tams.tech>2023-02-01 15:06:37 -0500
commitbd606503c4f7800a4b6d33b68883dc0968d2c6d9 (patch)
tree890b5df6be0fa8b69db129c376853550199d86e9
parent40bd1d1ded9ef440dea8b51c2d451cf26e856885 (diff)
Add is_variant methods to all enumsfeature/is_variant
-rw-r--r--Cargo.toml1
-rw-r--r--entities/Cargo.toml1
-rw-r--r--entities/src/attachment.rs3
-rw-r--r--entities/src/error.rs4
-rw-r--r--entities/src/event.rs3
-rw-r--r--entities/src/filter.rs5
-rw-r--r--entities/src/notification.rs3
-rw-r--r--entities/src/visibility.rs17
-rw-r--r--src/errors.rs3
-rw-r--r--src/scopes.rs14
10 files changed, 38 insertions, 16 deletions
diff --git a/Cargo.toml b/Cargo.toml
index a80c75b..8f9eb65 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -49,6 +49,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"
diff --git a/entities/Cargo.toml b/entities/Cargo.toml
index ef1838e..30d2153 100644
--- a/entities/Cargo.toml
+++ b/entities/Cargo.toml
@@ -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"
diff --git a/entities/src/attachment.rs b/entities/src/attachment.rs
index 489d0fa..65e0cf1 100644
--- a/entities/src/attachment.rs
+++ b/entities/src/attachment.rs
@@ -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")]
diff --git a/entities/src/error.rs b/entities/src/error.rs
index d4e52ce..bf07202 100644
--- a/entities/src/error.rs
+++ b/entities/src/error.rs
@@ -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 },
diff --git a/entities/src/event.rs b/entities/src/event.rs
index 007aedd..2898e4c 100644
--- a/entities/src/event.rs
+++ b/entities/src/event.rs
@@ -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
diff --git a/entities/src/filter.rs b/entities/src/filter.rs
index b0fea28..6b0e110 100644
--- a/entities/src/filter.rs
+++ b/entities/src/filter.rs
@@ -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
diff --git a/entities/src/notification.rs b/entities/src/notification.rs
index adaa7f9..06bdc5b 100644
--- a/entities/src/notification.rs
+++ b/entities/src/notification.rs
@@ -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.
diff --git a/entities/src/visibility.rs b/entities/src/visibility.rs
index 590c550..c0f3760 100644
--- a/entities/src/visibility.rs
+++ b/entities/src/visibility.rs
@@ -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());
+ }
+}
diff --git a/src/errors.rs b/src/errors.rs
index 1459d71..89a16fa 100644
--- a/src/errors.rs
+++ b/src/errors.rs
@@ -2,6 +2,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.
diff --git a/src/scopes.rs b/src/scopes.rs
index 4efd8f5..afd1d78 100644
--- a/src/scopes.rs
+++ b/src/scopes.rs
@@ -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")]