summaryrefslogtreecommitdiffstats
path: root/src/scopes.rs
diff options
context:
space:
mode:
authorPaul Woolcock <paul@woolcock.us>2018-08-29 13:52:35 -0400
committerPaul Woolcock <paul@woolcock.us>2018-08-30 19:12:16 -0400
commitaf806b7856c974935046e18b627c6dd3e999b9fa (patch)
treed562429e3853e733e15b9c94f03a9ab614e95081 /src/scopes.rs
parent57cc44368c46ab0c1b3d44d9aa843699c00fa130 (diff)
move Scopes to their own module
Diffstat (limited to 'src/scopes.rs')
-rw-r--r--src/scopes.rs95
1 files changed, 95 insertions, 0 deletions
diff --git a/src/scopes.rs b/src/scopes.rs
new file mode 100644
index 0000000..282d1f9
--- /dev/null
+++ b/src/scopes.rs
@@ -0,0 +1,95 @@
+use std::fmt;
+
+/// 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, Hash, Serialize)]
+pub enum Scopes {
+ /// All Permissions, equivalent to `read write follow`
+ #[serde(rename = "read write follow")]
+ All,
+ /// Only permission to add and remove followers.
+ #[serde(rename = "follow")]
+ Follow,
+ /// Read only permissions.
+ #[serde(rename = "read")]
+ Read,
+ /// Read & Follow permissions.
+ #[serde(rename = "read follow")]
+ ReadFollow,
+ /// Read & Write permissions.
+ #[serde(rename = "read write")]
+ ReadWrite,
+ /// Write only permissions.
+ #[serde(rename = "write")]
+ Write,
+ /// Write & Follow permissions.
+ #[serde(rename = "write follow")]
+ WriteFollow,
+}
+
+impl fmt::Display for Scopes {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ use self::Scopes::*;
+ write!(
+ f,
+ "{}",
+ match *self {
+ All => "read%20write%20follow",
+ Follow => "follow",
+ Read => "read",
+ ReadFollow => "read%20follow",
+ ReadWrite => "read%20write",
+ Write => "write",
+ WriteFollow => "write%20follow",
+ }
+ )
+ }
+}
+
+impl Default for Scopes {
+ fn default() -> Self {
+ Scopes::Read
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn test_scopes_display() {
+ let values = [
+ Scopes::All,
+ Scopes::Follow,
+ Scopes::Read,
+ Scopes::ReadFollow,
+ Scopes::ReadWrite,
+ Scopes::Write,
+ Scopes::WriteFollow,
+ ];
+
+ let expecteds = [
+ "read%20write%20follow".to_string(),
+ "follow".to_string(),
+ "read".to_string(),
+ "read%20follow".to_string(),
+ "read%20write".to_string(),
+ "write".to_string(),
+ "write%20follow".to_string(),
+ ];
+
+ let tests = values.into_iter().zip(expecteds.into_iter());
+
+ for (value, expected) in tests {
+ let result = value.to_string();
+ assert_eq!(&result, expected);
+ }
+ }
+
+ #[test]
+ fn test_scopes_default() {
+ let default: Scopes = Default::default();
+ assert_eq!(default, Scopes::Read);
+ }
+}