rename.rs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. #![allow(dead_code)]
  2. use indoc::indoc;
  3. use pretty_assertions::assert_eq;
  4. use tsify::Tsify;
  5. #[test]
  6. fn test_rename() {
  7. #[derive(Tsify)]
  8. struct RenamedStruct {
  9. #[serde(rename = "X")]
  10. x: i32,
  11. #[serde(rename = "Y")]
  12. y: i32,
  13. }
  14. assert_eq!(
  15. RenamedStruct::DECL,
  16. indoc! {"
  17. export interface RenamedStruct {
  18. X: number;
  19. Y: number;
  20. }"
  21. }
  22. );
  23. #[derive(Tsify)]
  24. enum RenamedEnum {
  25. #[serde(rename = "X")]
  26. A(bool),
  27. #[serde(rename = "Y")]
  28. B(i64),
  29. #[serde(rename = "Z")]
  30. C(String),
  31. #[serde(skip)]
  32. D(i32),
  33. }
  34. let expected = indoc! {r#"
  35. export type RenamedEnum = { X: boolean } | { Y: number } | { Z: string };"#
  36. };
  37. assert_eq!(RenamedEnum::DECL, expected);
  38. }
  39. #[test]
  40. fn test_rename_all() {
  41. #[allow(clippy::enum_variant_names)]
  42. #[derive(Tsify)]
  43. #[serde(rename_all = "snake_case")]
  44. #[tsify(namespace)]
  45. enum Enum {
  46. SnakeCase {
  47. foo: bool,
  48. foo_bar: bool,
  49. },
  50. #[serde(rename_all = "camelCase")]
  51. CamelCase {
  52. foo: bool,
  53. foo_bar: bool,
  54. },
  55. #[serde(rename_all = "kebab-case")]
  56. KebabCase {
  57. foo: bool,
  58. foo_bar: bool,
  59. },
  60. #[serde(rename_all = "SCREAMING_SNAKE_CASE")]
  61. ScreamingSnakeCase {
  62. foo: bool,
  63. foo_bar: bool,
  64. },
  65. }
  66. #[derive(Tsify)]
  67. #[serde(rename_all = "PascalCase")]
  68. struct PascalCase {
  69. foo: bool,
  70. foo_bar: bool,
  71. }
  72. #[derive(Tsify)]
  73. #[serde(rename_all = "SCREAMING-KEBAB-CASE")]
  74. struct ScreamingKebab {
  75. foo: bool,
  76. foo_bar: bool,
  77. }
  78. let expected = indoc! {r#"
  79. declare namespace Enum {
  80. export type snake_case = { snake_case: { foo: boolean; foo_bar: boolean } };
  81. export type camel_case = { camel_case: { foo: boolean; fooBar: boolean } };
  82. export type kebab_case = { kebab_case: { foo: boolean; "foo-bar": boolean } };
  83. export type screaming_snake_case = { screaming_snake_case: { FOO: boolean; FOO_BAR: boolean } };
  84. }
  85. export type Enum = { snake_case: { foo: boolean; foo_bar: boolean } } | { camel_case: { foo: boolean; fooBar: boolean } } | { kebab_case: { foo: boolean; "foo-bar": boolean } } | { screaming_snake_case: { FOO: boolean; FOO_BAR: boolean } };"#
  86. };
  87. assert_eq!(Enum::DECL, expected);
  88. assert_eq!(
  89. PascalCase::DECL,
  90. indoc! {"
  91. export interface PascalCase {
  92. Foo: boolean;
  93. FooBar: boolean;
  94. }"
  95. }
  96. );
  97. assert_eq!(
  98. ScreamingKebab::DECL,
  99. indoc! {r#"
  100. export interface ScreamingKebab {
  101. FOO: boolean;
  102. "FOO-BAR": boolean;
  103. }"#
  104. }
  105. );
  106. }