Add mastodon_async_entities
This patch move the entities module to a helper-crate. With this, we give the user the opportunity to use only the entities types in their codebase, if need be. One scenario where this is required came up in https://github.com/dscottboggs/mastodon-async/issues/38 TL;DR is: A user needed to be able to pass types like `Status` from a backend part of an application to a frontend which was compiled to WASM. Because mastodon_async depends on tokio, which does not compile to WASM (at least not with the features required by mastodon_async). One option would have been to provide types in the application code which can be constructed from mastodon_asyncs entity types. This would lead to _a lot_ of code duplication (over several projects still,... but that's rather undesireable anyways). The solution mastodon_async offers with this patch is a helper-crate which only contains the entity types: mastodon_async_entities. mastodon_async publicly exports the whole mastodon_async_entities crate, so users do not have to depend on the latter directly. In addition to the `entities` module from mastodon_async, also the `Visibility` type had to be moved. `mastodon_async_entities` also got an own `Error` type, which `mastodon_async::Error` can of course wrap. Signed-off-by: Matthias Beyer <mail@beyermatthias.de> Suggested-by: D. Scott Boggs <scott@tams.tech>
This commit is contained in:
parent
02de9f5d32
commit
af3facfbf0
12
Cargo.toml
12
Cargo.toml
|
@ -1,3 +1,11 @@
|
||||||
|
[workspace]
|
||||||
|
resolver = "2"
|
||||||
|
|
||||||
|
members = [
|
||||||
|
".",
|
||||||
|
"entities",
|
||||||
|
]
|
||||||
|
|
||||||
[package]
|
[package]
|
||||||
name = "mastodon-async"
|
name = "mastodon-async"
|
||||||
version = "1.0.3"
|
version = "1.0.3"
|
||||||
|
@ -13,6 +21,10 @@ repository = "https://github.com/dscottboggs/mastodon-async.git"
|
||||||
[package.metadata.docs.rs]
|
[package.metadata.docs.rs]
|
||||||
features = ["all"]
|
features = ["all"]
|
||||||
|
|
||||||
|
[dependencies.mastodon-async-entities]
|
||||||
|
path = "./entities"
|
||||||
|
version = "1.0.3"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
futures = "0.3.25"
|
futures = "0.3.25"
|
||||||
doc-comment = "0.3"
|
doc-comment = "0.3"
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
[package]
|
||||||
|
name = "mastodon-async-entities"
|
||||||
|
version = "1.0.3"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
futures = "0.3.25"
|
||||||
|
log = { version = "0.4", features = ["kv_unstable", "serde", "std", "kv_unstable_serde", "kv_unstable_std"] }
|
||||||
|
serde = { version = "1", features = ["derive"] }
|
||||||
|
thiserror = "1"
|
||||||
|
time = { version = "0.3", features = ["parsing", "serde", "formatting"] }
|
|
@ -1,6 +1,5 @@
|
||||||
//! A module containing everything relating to a account returned from the api.
|
//! A module containing everything relating to a account returned from the api.
|
||||||
|
|
||||||
use crate::status_builder;
|
|
||||||
use serde::{
|
use serde::{
|
||||||
de::{self, Deserializer, Unexpected},
|
de::{self, Deserializer, Unexpected},
|
||||||
Deserialize, Serialize,
|
Deserialize, Serialize,
|
||||||
|
@ -65,7 +64,7 @@ pub struct MetadataField {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl MetadataField {
|
impl MetadataField {
|
||||||
pub(crate) fn new(name: &str, value: &str) -> MetadataField {
|
pub fn new(name: &str, value: &str) -> MetadataField {
|
||||||
MetadataField {
|
MetadataField {
|
||||||
name: name.into(),
|
name: name.into(),
|
||||||
value: value.into(),
|
value: value.into(),
|
||||||
|
@ -76,7 +75,7 @@ impl MetadataField {
|
||||||
/// An extra object given from `verify_credentials` giving defaults about a user
|
/// An extra object given from `verify_credentials` giving defaults about a user
|
||||||
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Eq)]
|
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Eq)]
|
||||||
pub struct Source {
|
pub struct Source {
|
||||||
privacy: Option<status_builder::Visibility>,
|
privacy: Option<crate::visibility::Visibility>,
|
||||||
#[serde(deserialize_with = "string_or_bool")]
|
#[serde(deserialize_with = "string_or_bool")]
|
||||||
sensitive: bool,
|
sensitive: bool,
|
||||||
note: Option<String>,
|
note: Option<String>,
|
||||||
|
@ -109,33 +108,33 @@ fn string_or_bool<'de, D: Deserializer<'de>>(val: D) -> ::std::result::Result<bo
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Default, Clone, Serialize, PartialEq, Eq)]
|
#[derive(Debug, Default, Clone, Serialize, PartialEq, Eq)]
|
||||||
pub(crate) struct UpdateSource {
|
pub struct UpdateSource {
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
pub(crate) privacy: Option<status_builder::Visibility>,
|
pub privacy: Option<crate::visibility::Visibility>,
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
pub(crate) sensitive: Option<bool>,
|
pub sensitive: Option<bool>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Default, Serialize, PartialEq, Eq)]
|
#[derive(Debug, Default, Serialize, PartialEq, Eq)]
|
||||||
pub(crate) struct Credentials {
|
pub struct Credentials {
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
pub(crate) display_name: Option<String>,
|
pub display_name: Option<String>,
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
pub(crate) note: Option<String>,
|
pub note: Option<String>,
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
pub(crate) avatar: Option<PathBuf>,
|
pub avatar: Option<PathBuf>,
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
pub(crate) header: Option<PathBuf>,
|
pub header: Option<PathBuf>,
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
pub(crate) source: Option<UpdateSource>,
|
pub source: Option<UpdateSource>,
|
||||||
#[serde(serialize_with = "fields_attributes_ser::ser")]
|
#[serde(serialize_with = "fields_attributes_ser::ser")]
|
||||||
pub(crate) fields_attributes: Vec<MetadataField>,
|
pub fields_attributes: Vec<MetadataField>,
|
||||||
}
|
}
|
||||||
|
|
||||||
mod fields_attributes_ser {
|
mod fields_attributes_ser {
|
||||||
use super::*;
|
use super::*;
|
||||||
use serde::ser::{SerializeMap, Serializer};
|
use serde::ser::{SerializeMap, Serializer};
|
||||||
pub(crate) fn ser<S>(attrs: &Vec<MetadataField>, serializer: S) -> Result<S::Ok, S::Error>
|
pub fn ser<S>(attrs: &Vec<MetadataField>, serializer: S) -> Result<S::Ok, S::Error>
|
||||||
where
|
where
|
||||||
S: Serializer,
|
S: Serializer,
|
||||||
{
|
{
|
|
@ -0,0 +1,6 @@
|
||||||
|
/// Error type
|
||||||
|
#[derive(Debug, thiserror::Error)]
|
||||||
|
pub enum Error {
|
||||||
|
#[error("unrecognized visibility '{invalid}'")]
|
||||||
|
VisibilityParsingError { invalid: String },
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::entities::{notification::Notification, status::Status};
|
use crate::{notification::Notification, status::Status};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
#[derive(Debug, Clone, Deserialize, Serialize)]
|
#[derive(Debug, Clone, Deserialize, Serialize)]
|
|
@ -0,0 +1,66 @@
|
||||||
|
use serde::Deserialize;
|
||||||
|
use serde::Serialize;
|
||||||
|
|
||||||
|
/// Error types for this crate
|
||||||
|
pub mod error;
|
||||||
|
|
||||||
|
/// Data structures for ser/de of account-related resources
|
||||||
|
pub mod account;
|
||||||
|
/// Data structures for ser/de of attachment-related resources
|
||||||
|
pub mod attachment;
|
||||||
|
/// Data structures for ser/de of card-related resources
|
||||||
|
pub mod card;
|
||||||
|
/// Data structures for ser/de of contetx-related resources
|
||||||
|
pub mod context;
|
||||||
|
/// Data structures for ser/de of streaming events
|
||||||
|
pub mod event;
|
||||||
|
/// Data structures for ser/de of filter-related resources
|
||||||
|
pub mod filter;
|
||||||
|
/// Data structures for ser/de of instance-related resources
|
||||||
|
pub mod instance;
|
||||||
|
/// Data structures for ser/de of list-related resources
|
||||||
|
pub mod list;
|
||||||
|
/// Data structures for ser/de of mention-related resources
|
||||||
|
pub mod mention;
|
||||||
|
/// Data structures for ser/de of notification-related resources
|
||||||
|
pub mod notification;
|
||||||
|
/// Data structures for ser/de of push-subscription-related resources
|
||||||
|
pub mod push;
|
||||||
|
/// Data structures for ser/de of relationship-related resources
|
||||||
|
pub mod relationship;
|
||||||
|
/// Data structures for ser/de of report-related resources
|
||||||
|
pub mod report;
|
||||||
|
/// Data structures for ser/de of search-related resources
|
||||||
|
pub mod search_result;
|
||||||
|
/// Data structures for ser/de of status-related resources
|
||||||
|
pub mod status;
|
||||||
|
/// Data structure for ser/de visibility
|
||||||
|
pub mod visibility;
|
||||||
|
|
||||||
|
/// An empty JSON object.
|
||||||
|
#[derive(Deserialize, Serialize, Debug, Copy, Clone, PartialEq, Eq)]
|
||||||
|
pub struct Empty {}
|
||||||
|
|
||||||
|
/// The purpose of this module is to alleviate imports of many common
|
||||||
|
/// structs by adding a glob import to the top of mastodon heavy
|
||||||
|
/// modules:
|
||||||
|
pub mod prelude {
|
||||||
|
pub use super::{
|
||||||
|
account::{Account, Source},
|
||||||
|
attachment::{Attachment, MediaType},
|
||||||
|
card::Card,
|
||||||
|
context::Context,
|
||||||
|
event::Event,
|
||||||
|
filter::{Filter, FilterContext},
|
||||||
|
instance::*,
|
||||||
|
list::List,
|
||||||
|
mention::Mention,
|
||||||
|
notification::Notification,
|
||||||
|
push::Subscription,
|
||||||
|
relationship::Relationship,
|
||||||
|
report::Report,
|
||||||
|
search_result::SearchResult,
|
||||||
|
status::{Application, Emoji, Status},
|
||||||
|
Empty,
|
||||||
|
};
|
||||||
|
}
|
|
@ -26,48 +26,48 @@ pub struct Subscription {
|
||||||
pub alerts: Option<Alerts>,
|
pub alerts: Option<Alerts>,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) mod add_subscription {
|
pub mod add_subscription {
|
||||||
use serde::Serialize;
|
|
||||||
|
|
||||||
use super::Alerts;
|
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Serialize, Default)]
|
|
||||||
pub(crate) struct Form {
|
|
||||||
pub(crate) subscription: Subscription,
|
|
||||||
pub(crate) data: Option<Data>,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Default)]
|
|
||||||
pub(crate) struct Subscription {
|
|
||||||
pub(crate) endpoint: String,
|
|
||||||
pub(crate) keys: Keys,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Default)]
|
|
||||||
pub(crate) struct Keys {
|
|
||||||
pub(crate) p256dh: String,
|
|
||||||
pub(crate) auth: String,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Default)]
|
|
||||||
pub(crate) struct Data {
|
|
||||||
pub(crate) alerts: Option<Alerts>,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(crate) mod update_data {
|
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use super::Alerts;
|
use super::Alerts;
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Default)]
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Default)]
|
||||||
pub(crate) struct Data {
|
pub struct Form {
|
||||||
pub(crate) alerts: Option<Alerts>,
|
pub subscription: Subscription,
|
||||||
|
pub data: Option<Data>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Default)]
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Default)]
|
||||||
pub(crate) struct Form {
|
pub struct Subscription {
|
||||||
pub(crate) id: String,
|
pub endpoint: String,
|
||||||
pub(crate) data: Data,
|
pub keys: Keys,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Default)]
|
||||||
|
pub struct Keys {
|
||||||
|
pub p256dh: String,
|
||||||
|
pub auth: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Default)]
|
||||||
|
pub struct Data {
|
||||||
|
pub alerts: Option<Alerts>,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub mod update_data {
|
||||||
|
use serde::Serialize;
|
||||||
|
|
||||||
|
use super::Alerts;
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Default)]
|
||||||
|
pub struct Data {
|
||||||
|
pub alerts: Option<Alerts>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Default)]
|
||||||
|
pub struct Form {
|
||||||
|
pub id: String,
|
||||||
|
pub data: Data,
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,7 +1,7 @@
|
||||||
//! Module containing all info relating to a status.
|
//! Module containing all info relating to a status.
|
||||||
|
|
||||||
use super::prelude::*;
|
use super::prelude::*;
|
||||||
use crate::{entities::card::Card, status_builder::Visibility};
|
use crate::{card::Card, visibility::Visibility};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use time::{serde::iso8601, OffsetDateTime};
|
use time::{serde::iso8601, OffsetDateTime};
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
use serde::Deserialize;
|
||||||
|
use serde::Serialize;
|
||||||
|
|
||||||
|
/// The visibility of a status.
|
||||||
|
#[derive(Clone, Copy, Debug, Deserialize, Serialize, PartialEq, Eq)]
|
||||||
|
#[serde(rename_all = "lowercase")]
|
||||||
|
pub enum Visibility {
|
||||||
|
/// A Direct message to a user
|
||||||
|
Direct,
|
||||||
|
/// Only available to followers
|
||||||
|
Private,
|
||||||
|
/// Not shown in public timelines
|
||||||
|
Unlisted,
|
||||||
|
/// Posted to public timelines
|
||||||
|
Public,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Default for Visibility {
|
||||||
|
fn default() -> Self {
|
||||||
|
Visibility::Public
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl std::str::FromStr for Visibility {
|
||||||
|
type Err = crate::error::Error;
|
||||||
|
|
||||||
|
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||||
|
match s.to_ascii_lowercase().as_str() {
|
||||||
|
"direct" => Ok(Visibility::Direct),
|
||||||
|
"private" => Ok(Visibility::Private),
|
||||||
|
"unlisted" => Ok(Visibility::Unlisted),
|
||||||
|
"public" => Ok(Visibility::Public),
|
||||||
|
invalid => Err(crate::error::Error::VisibilityParsingError {
|
||||||
|
invalid: invalid.to_string(),
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,61 +1,3 @@
|
||||||
use serde::Deserialize;
|
|
||||||
|
|
||||||
/// Data structures for ser/de of account-related resources
|
|
||||||
pub mod account;
|
|
||||||
/// Data structures for ser/de of attachment-related resources
|
|
||||||
pub mod attachment;
|
|
||||||
/// Data structures for ser/de of card-related resources
|
|
||||||
pub mod card;
|
|
||||||
/// Data structures for ser/de of contetx-related resources
|
|
||||||
pub mod context;
|
|
||||||
/// Data structures for ser/de of streaming events
|
|
||||||
pub mod event;
|
|
||||||
/// Data structures for ser/de of filter-related resources
|
|
||||||
pub mod filter;
|
|
||||||
/// Data structures for ser/de of instance-related resources
|
|
||||||
pub mod instance;
|
|
||||||
pub(crate) mod itemsiter;
|
pub(crate) mod itemsiter;
|
||||||
/// Data structures for ser/de of list-related resources
|
|
||||||
pub mod list;
|
|
||||||
/// Data structures for ser/de of mention-related resources
|
|
||||||
pub mod mention;
|
|
||||||
/// Data structures for ser/de of notification-related resources
|
|
||||||
pub mod notification;
|
|
||||||
/// Data structures for ser/de of push-subscription-related resources
|
|
||||||
pub mod push;
|
|
||||||
/// Data structures for ser/de of relationship-related resources
|
|
||||||
pub mod relationship;
|
|
||||||
/// Data structures for ser/de of report-related resources
|
|
||||||
pub mod report;
|
|
||||||
/// Data structures for ser/de of search-related resources
|
|
||||||
pub mod search_result;
|
|
||||||
/// Data structures for ser/de of status-related resources
|
|
||||||
pub mod status;
|
|
||||||
|
|
||||||
/// An empty JSON object.
|
pub use mastodon_async_entities::*;
|
||||||
#[derive(Deserialize, Serialize, Debug, Copy, Clone, PartialEq, Eq)]
|
|
||||||
pub struct Empty {}
|
|
||||||
|
|
||||||
/// The purpose of this module is to alleviate imports of many common
|
|
||||||
/// structs by adding a glob import to the top of mastodon heavy
|
|
||||||
/// modules:
|
|
||||||
pub mod prelude {
|
|
||||||
pub use super::{
|
|
||||||
account::{Account, Source},
|
|
||||||
attachment::{Attachment, MediaType},
|
|
||||||
card::Card,
|
|
||||||
context::Context,
|
|
||||||
event::Event,
|
|
||||||
filter::{Filter, FilterContext},
|
|
||||||
instance::*,
|
|
||||||
list::List,
|
|
||||||
mention::Mention,
|
|
||||||
notification::Notification,
|
|
||||||
push::Subscription,
|
|
||||||
relationship::Relationship,
|
|
||||||
report::Report,
|
|
||||||
search_result::SearchResult,
|
|
||||||
status::{Application, Emoji, Status},
|
|
||||||
Empty,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
|
@ -99,6 +99,9 @@ pub enum Error {
|
||||||
/// larger than the system's usize allows.
|
/// larger than the system's usize allows.
|
||||||
#[error("integer didn't fit in the target size")]
|
#[error("integer didn't fit in the target size")]
|
||||||
IntConversion(#[from] TryFromIntError),
|
IntConversion(#[from] TryFromIntError),
|
||||||
|
/// Error from mastodon-async-entities
|
||||||
|
#[error(transparent)]
|
||||||
|
Entities(#[from] mastodon_async_entities::error::Error),
|
||||||
/// Other errors
|
/// Other errors
|
||||||
#[error("other error: {0:?}")]
|
#[error("other error: {0:?}")]
|
||||||
Other(String),
|
Other(String),
|
||||||
|
|
|
@ -92,11 +92,12 @@ pub use errors::{ApiError, Error, Result};
|
||||||
pub use isolang::Language;
|
pub use isolang::Language;
|
||||||
pub use mastodon::{Mastodon, MastodonUnauthenticated};
|
pub use mastodon::{Mastodon, MastodonUnauthenticated};
|
||||||
// pub use mastodon_client::{MastodonClient, MastodonUnauthenticated};
|
// pub use mastodon_client::{MastodonClient, MastodonUnauthenticated};
|
||||||
|
pub use mastodon_async_entities::visibility::Visibility;
|
||||||
pub use registration::Registration;
|
pub use registration::Registration;
|
||||||
pub use requests::{
|
pub use requests::{
|
||||||
AddFilterRequest, AddPushRequest, StatusesRequest, UpdateCredsRequest, UpdatePushRequest,
|
AddFilterRequest, AddPushRequest, StatusesRequest, UpdateCredsRequest, UpdatePushRequest,
|
||||||
};
|
};
|
||||||
pub use status_builder::{NewStatus, StatusBuilder, Visibility};
|
pub use status_builder::{NewStatus, StatusBuilder};
|
||||||
|
|
||||||
/// Registering your App
|
/// Registering your App
|
||||||
pub mod apps;
|
pub mod apps;
|
||||||
|
@ -126,7 +127,6 @@ mod macros;
|
||||||
pub mod prelude {
|
pub mod prelude {
|
||||||
pub use crate::{
|
pub use crate::{
|
||||||
scopes::Scopes,
|
scopes::Scopes,
|
||||||
status_builder::Visibility,
|
|
||||||
Data,
|
Data,
|
||||||
Mastodon,
|
Mastodon,
|
||||||
// MastodonClient,
|
// MastodonClient,
|
||||||
|
@ -134,6 +134,7 @@ pub mod prelude {
|
||||||
Registration,
|
Registration,
|
||||||
StatusBuilder,
|
StatusBuilder,
|
||||||
StatusesRequest,
|
StatusesRequest,
|
||||||
|
Visibility,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
/// The mastodon client
|
/// The mastodon client
|
||||||
|
|
|
@ -6,15 +6,15 @@ use std::{
|
||||||
use crate::{
|
use crate::{
|
||||||
entities::account::{Credentials, MetadataField, UpdateSource},
|
entities::account::{Credentials, MetadataField, UpdateSource},
|
||||||
errors::Result,
|
errors::Result,
|
||||||
status_builder,
|
|
||||||
};
|
};
|
||||||
|
use mastodon_async_entities::visibility::Visibility;
|
||||||
|
|
||||||
/// Builder to pass to the Mastodon::update_credentials method
|
/// Builder to pass to the Mastodon::update_credentials method
|
||||||
///
|
///
|
||||||
/// // Example
|
/// // Example
|
||||||
///
|
///
|
||||||
/// ```no_run
|
/// ```no_run
|
||||||
/// use mastodon_async::{prelude::*, status_builder::Visibility, UpdateCredsRequest};
|
/// use mastodon_async::{prelude::*, entities::visibility::Visibility, UpdateCredsRequest};
|
||||||
///
|
///
|
||||||
/// let data = Data::default();
|
/// let data = Data::default();
|
||||||
/// let client = Mastodon::from(data);
|
/// let client = Mastodon::from(data);
|
||||||
|
@ -35,7 +35,7 @@ pub struct UpdateCredsRequest {
|
||||||
field_attributes: Vec<MetadataField>,
|
field_attributes: Vec<MetadataField>,
|
||||||
|
|
||||||
// UpdateSource fields
|
// UpdateSource fields
|
||||||
privacy: Option<status_builder::Visibility>,
|
privacy: Option<Visibility>,
|
||||||
sensitive: Option<bool>,
|
sensitive: Option<bool>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -126,13 +126,13 @@ impl UpdateCredsRequest {
|
||||||
/// // Example
|
/// // Example
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use mastodon_async::{status_builder::Visibility, UpdateCredsRequest};
|
/// use mastodon_async::{entities::visibility::Visibility, UpdateCredsRequest};
|
||||||
///
|
///
|
||||||
/// let mut builder = UpdateCredsRequest::new();
|
/// let mut builder = UpdateCredsRequest::new();
|
||||||
///
|
///
|
||||||
/// builder.privacy(Visibility::Public);
|
/// builder.privacy(Visibility::Public);
|
||||||
/// ```
|
/// ```
|
||||||
pub fn privacy(&mut self, privacy: status_builder::Visibility) -> &mut Self {
|
pub fn privacy(&mut self, privacy: Visibility) -> &mut Self {
|
||||||
self.privacy = Some(privacy);
|
self.privacy = Some(privacy);
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
@ -188,7 +188,7 @@ impl UpdateCredsRequest {
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
use crate::entities::account::{Credentials, MetadataField, UpdateSource};
|
use crate::entities::account::{Credentials, MetadataField, UpdateSource};
|
||||||
use status_builder::Visibility;
|
use mastodon_async_entities::visibility::Visibility;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_update_creds_request_new() {
|
fn test_update_creds_request_new() {
|
||||||
|
|
|
@ -1,9 +1,7 @@
|
||||||
use std::str::FromStr;
|
|
||||||
|
|
||||||
use isolang::Language;
|
use isolang::Language;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::Serialize;
|
||||||
|
|
||||||
use crate::format_err;
|
use mastodon_async_entities::visibility::Visibility;
|
||||||
|
|
||||||
/// A builder pattern struct for constructing a status.
|
/// A builder pattern struct for constructing a status.
|
||||||
///
|
///
|
||||||
|
@ -37,7 +35,7 @@ impl StatusBuilder {
|
||||||
/// // Example
|
/// // Example
|
||||||
///
|
///
|
||||||
/// ```rust,no_run
|
/// ```rust,no_run
|
||||||
/// use mastodon_async::{status_builder::Visibility, prelude::*};
|
/// use mastodon_async::{entities::visibility::Visibility, prelude::*};
|
||||||
///
|
///
|
||||||
/// let data = Data::default();
|
/// let data = Data::default();
|
||||||
/// let client = Mastodon::from(data);
|
/// let client = Mastodon::from(data);
|
||||||
|
@ -150,7 +148,7 @@ impl StatusBuilder {
|
||||||
/// // Example
|
/// // Example
|
||||||
///
|
///
|
||||||
/// ```rust
|
/// ```rust
|
||||||
/// use mastodon_async::{prelude::*, status_builder::Visibility};
|
/// use mastodon_async::{prelude::*, entities::visibility::Visibility};
|
||||||
/// let status = StatusBuilder::new()
|
/// let status = StatusBuilder::new()
|
||||||
/// .status("awooooooo")
|
/// .status("awooooooo")
|
||||||
/// .visibility(Visibility::Public)
|
/// .visibility(Visibility::Public)
|
||||||
|
@ -242,40 +240,6 @@ pub struct NewStatus {
|
||||||
content_type: Option<String>,
|
content_type: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The visibility of a status.
|
|
||||||
#[derive(Clone, Copy, Debug, Deserialize, Serialize, PartialEq, Eq)]
|
|
||||||
#[serde(rename_all = "lowercase")]
|
|
||||||
pub enum Visibility {
|
|
||||||
/// A Direct message to a user
|
|
||||||
Direct,
|
|
||||||
/// Only available to followers
|
|
||||||
Private,
|
|
||||||
/// Not shown in public timelines
|
|
||||||
Unlisted,
|
|
||||||
/// Posted to public timelines
|
|
||||||
Public,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Default for Visibility {
|
|
||||||
fn default() -> Self {
|
|
||||||
Visibility::Public
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl FromStr for Visibility {
|
|
||||||
type Err = crate::Error;
|
|
||||||
|
|
||||||
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
|
||||||
match s.to_ascii_lowercase().as_str() {
|
|
||||||
"direct" => Ok(Visibility::Direct),
|
|
||||||
"private" => Ok(Visibility::Private),
|
|
||||||
"unlisted" => Ok(Visibility::Unlisted),
|
|
||||||
"public" => Ok(Visibility::Public),
|
|
||||||
invalid => Err(format_err!("unrecognized visibility '{invalid}'")),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
Loading…
Reference in New Issue