From f16d7b67c3f641de71e1ecea59a03460bac0b3f5 Mon Sep 17 00:00:00 2001 From: Abhik Jain Date: Thu, 15 Apr 2021 17:15:05 +0530 Subject: [PATCH] serde-macros: Add M_MATRIX_ERROR_CASE casing rename rule --- ruma-client-api/src/error/kind_serde.rs | 34 +------------- ruma-serde-macros/src/case.rs | 60 +++++++++++++++++-------- 2 files changed, 42 insertions(+), 52 deletions(-) diff --git a/ruma-client-api/src/error/kind_serde.rs b/ruma-client-api/src/error/kind_serde.rs index 6750cb27..e153a318 100644 --- a/ruma-client-api/src/error/kind_serde.rs +++ b/ruma-client-api/src/error/kind_serde.rs @@ -208,72 +208,40 @@ impl<'de> Visitor<'de> for ErrorKindVisitor { } } -// FIXME: Add `M_FOO_BAR` as a naming scheme in StringEnum and remove rename attributes. #[derive(FromString, DeserializeFromCowStr)] +#[ruma_enum(rename_all = "M_MATRIX_ERROR_CASE")] enum ErrCode { - #[ruma_enum(rename = "M_FORBIDDEN")] Forbidden, - #[ruma_enum(rename = "M_UNKNOWN_TOKEN")] UnknownToken, - #[ruma_enum(rename = "M_MISSING_TOKEN")] MissingToken, - #[ruma_enum(rename = "M_BAD_JSON")] BadJson, - #[ruma_enum(rename = "M_NOT_JSON")] NotJson, - #[ruma_enum(rename = "M_NOT_FOUND")] NotFound, - #[ruma_enum(rename = "M_LIMIT_EXCEEDED")] LimitExceeded, - #[ruma_enum(rename = "M_UNKNOWN")] Unknown, - #[ruma_enum(rename = "M_UNRECOGNIZED")] Unrecognized, - #[ruma_enum(rename = "M_UNAUTHORIZED")] Unauthorized, - #[ruma_enum(rename = "M_USER_DEACTIVATED")] UserDeactivated, - #[ruma_enum(rename = "M_USER_IN_USE")] UserInUse, - #[ruma_enum(rename = "M_INVALID_USERNAME")] InvalidUsername, - #[ruma_enum(rename = "M_ROOM_IN_USE")] RoomInUse, - #[ruma_enum(rename = "M_INVALID_ROOM_STATE")] InvalidRoomState, - #[ruma_enum(rename = "M_THREEPID_IN_USE")] ThreepidInUse, - #[ruma_enum(rename = "M_THREEPID_NOT_FOUND")] ThreepidNotFound, - #[ruma_enum(rename = "M_THREEPID_AUTH_FAILED")] ThreepidAuthFailed, - #[ruma_enum(rename = "M_THREEPID_DENIED")] ThreepidDenied, - #[ruma_enum(rename = "M_SERVER_NOT_TRUSTED")] ServerNotTrusted, - #[ruma_enum(rename = "M_UNSUPPORTED_ROOM_VERSION")] UnsupportedRoomVersion, - #[ruma_enum(rename = "M_INCOMPATIBLE_ROOM_VERSION")] IncompatibleRoomVersion, - #[ruma_enum(rename = "M_BAD_STATE")] BadState, - #[ruma_enum(rename = "M_GUEST_ACCESS_FORBIDDEN")] GuestAccessForbidden, - #[ruma_enum(rename = "M_CAPTCHA_NEEDED")] CaptchaNeeded, - #[ruma_enum(rename = "M_CAPTCHA_INVALID")] CaptchaInvalid, - #[ruma_enum(rename = "M_MISSING_PARAM")] MissingParam, - #[ruma_enum(rename = "M_INVALID_PARAM")] InvalidParam, - #[ruma_enum(rename = "M_TOO_LARGE")] TooLarge, - #[ruma_enum(rename = "M_EXCLUSIVE")] Exclusive, - #[ruma_enum(rename = "M_RESOURCE_LIMIT_EXCEEDED")] ResourceLimitExceeded, - #[ruma_enum(rename = "M_CANNOT_LEAVE_SERVER_NOTICE_ROOM")] CannotLeaveServerNoticeRoom, _Custom(String), } diff --git a/ruma-serde-macros/src/case.rs b/ruma-serde-macros/src/case.rs index 579ffd62..fd4cd51c 100644 --- a/ruma-serde-macros/src/case.rs +++ b/ruma-serde-macros/src/case.rs @@ -33,6 +33,9 @@ pub enum RenameRule { KebabCase, /// Rename direct children to "SCREAMING-KEBAB-CASE" style. ScreamingKebabCase, + /// Rename direct children to "M_MATRIX_ERROR_CASE" style, as used for responses with error in + /// Matrix spec. + MatrixErrorCase, } impl RenameRule { @@ -56,6 +59,7 @@ impl RenameRule { ScreamingSnakeCase => SnakeCase.apply_to_variant(variant).to_ascii_uppercase(), KebabCase => SnakeCase.apply_to_variant(variant).replace('_', "-"), ScreamingKebabCase => ScreamingSnakeCase.apply_to_variant(variant).replace('_', "-"), + MatrixErrorCase => String::from("M_") + &ScreamingSnakeCase.apply_to_variant(variant), } } @@ -87,6 +91,7 @@ impl RenameRule { ScreamingSnakeCase => field.to_ascii_uppercase(), KebabCase => field.replace('_', "-"), ScreamingKebabCase => ScreamingSnakeCase.apply_to_field(field).replace('_', "-"), + MatrixErrorCase => String::from("M_") + &ScreamingSnakeCase.apply_to_field(field), } } } @@ -104,6 +109,7 @@ impl FromStr for RenameRule { "SCREAMING_SNAKE_CASE" => Ok(ScreamingSnakeCase), "kebab-case" => Ok(KebabCase), "SCREAMING-KEBAB-CASE" => Ok(ScreamingKebabCase), + "M_MATRIX_ERROR_CASE" => Ok(MatrixErrorCase), _ => Err(()), } } @@ -111,21 +117,34 @@ impl FromStr for RenameRule { #[test] fn rename_variants() { - for &(original, lower, upper, camel, snake, screaming, kebab, screaming_kebab) in &[ - ("Outcome", "outcome", "OUTCOME", "outcome", "outcome", "OUTCOME", "outcome", "OUTCOME"), - ( - "VeryTasty", - "verytasty", - "VERYTASTY", - "veryTasty", - "very_tasty", - "VERY_TASTY", - "very-tasty", - "VERY-TASTY", - ), - ("A", "a", "A", "a", "a", "A", "a", "A"), - ("Z42", "z42", "Z42", "z42", "z42", "Z42", "z42", "Z42"), - ] { + for &(original, lower, upper, camel, snake, screaming, kebab, screaming_kebab, matrix_error) in + &[ + ( + "Outcome", + "outcome", + "OUTCOME", + "outcome", + "outcome", + "OUTCOME", + "outcome", + "OUTCOME", + "M_OUTCOME", + ), + ( + "VeryTasty", + "verytasty", + "VERYTASTY", + "veryTasty", + "very_tasty", + "VERY_TASTY", + "very-tasty", + "VERY-TASTY", + "M_VERY_TASTY", + ), + ("A", "a", "A", "a", "a", "A", "a", "A", "M_A"), + ("Z42", "z42", "Z42", "z42", "z42", "Z42", "z42", "Z42", "M_Z42"), + ] + { assert_eq!(None.apply_to_variant(original), original); assert_eq!(LowerCase.apply_to_variant(original), lower); assert_eq!(Uppercase.apply_to_variant(original), upper); @@ -135,13 +154,14 @@ fn rename_variants() { assert_eq!(ScreamingSnakeCase.apply_to_variant(original), screaming); assert_eq!(KebabCase.apply_to_variant(original), kebab); assert_eq!(ScreamingKebabCase.apply_to_variant(original), screaming_kebab); + assert_eq!(MatrixErrorCase.apply_to_variant(original), matrix_error); } } #[test] fn rename_fields() { - for &(original, upper, pascal, camel, screaming, kebab, screaming_kebab) in &[ - ("outcome", "OUTCOME", "Outcome", "outcome", "OUTCOME", "outcome", "OUTCOME"), + for &(original, upper, pascal, camel, screaming, kebab, screaming_kebab, matrix_error) in &[ + ("outcome", "OUTCOME", "Outcome", "outcome", "OUTCOME", "outcome", "OUTCOME", "M_OUTCOME"), ( "very_tasty", "VERY_TASTY", @@ -150,9 +170,10 @@ fn rename_fields() { "VERY_TASTY", "very-tasty", "VERY-TASTY", + "M_VERY_TASTY", ), - ("a", "A", "A", "a", "A", "a", "A"), - ("z42", "Z42", "Z42", "z42", "Z42", "z42", "Z42"), + ("a", "A", "A", "a", "A", "a", "A", "M_A"), + ("z42", "Z42", "Z42", "z42", "Z42", "z42", "Z42", "M_Z42"), ] { assert_eq!(None.apply_to_field(original), original); assert_eq!(Uppercase.apply_to_field(original), upper); @@ -162,5 +183,6 @@ fn rename_fields() { assert_eq!(ScreamingSnakeCase.apply_to_field(original), screaming); assert_eq!(KebabCase.apply_to_field(original), kebab); assert_eq!(ScreamingKebabCase.apply_to_field(original), screaming_kebab); + assert_eq!(MatrixErrorCase.apply_to_field(original), matrix_error); } }