serde-macros: Add M_MATRIX_ERROR_CASE casing rename rule

This commit is contained in:
Abhik Jain 2021-04-15 17:15:05 +05:30 committed by GitHub
parent 461f856b5a
commit f16d7b67c3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 42 additions and 52 deletions

View File

@ -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),
}

View File

@ -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,8 +117,19 @@ 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"),
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",
@ -122,10 +139,12 @@ fn rename_variants() {
"VERY_TASTY",
"very-tasty",
"VERY-TASTY",
"M_VERY_TASTY",
),
("A", "a", "A", "a", "a", "A", "a", "A"),
("Z42", "z42", "Z42", "z42", "z42", "Z42", "z42", "Z42"),
] {
("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);
}
}