optional.rs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #![allow(dead_code)]
  2. use indoc::indoc;
  3. use pretty_assertions::assert_eq;
  4. use tsify::Tsify;
  5. #[test]
  6. fn test_optional() {
  7. #[derive(Tsify)]
  8. struct Optional {
  9. #[tsify(optional)]
  10. a: Option<i32>,
  11. #[serde(skip_serializing_if = "Option::is_none")]
  12. b: Option<String>,
  13. #[serde(default)]
  14. c: i32,
  15. #[serde(default)]
  16. d: Option<String>,
  17. }
  18. #[derive(Tsify)]
  19. #[serde(default)]
  20. struct OptionalAll {
  21. a: i32,
  22. b: i32,
  23. c: Option<i32>,
  24. }
  25. if cfg!(feature = "js") {
  26. assert_eq!(
  27. Optional::DECL,
  28. indoc! {"
  29. export interface Optional {
  30. a?: number;
  31. b?: string;
  32. c?: number;
  33. d?: string | undefined;
  34. }"
  35. }
  36. );
  37. assert_eq!(
  38. OptionalAll::DECL,
  39. indoc! {"
  40. export interface OptionalAll {
  41. a?: number;
  42. b?: number;
  43. c?: number | undefined;
  44. }"
  45. }
  46. );
  47. } else {
  48. assert_eq!(
  49. Optional::DECL,
  50. indoc! {"
  51. export interface Optional {
  52. a?: number;
  53. b?: string;
  54. c?: number;
  55. d?: string | null;
  56. }"
  57. }
  58. );
  59. assert_eq!(
  60. OptionalAll::DECL,
  61. indoc! {"
  62. export interface OptionalAll {
  63. a?: number;
  64. b?: number;
  65. c?: number | null;
  66. }"
  67. }
  68. );
  69. }
  70. }