FIRFieldValue.h 3.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /*
  2. * Copyright 2017 Google
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. #import <Foundation/Foundation.h>
  17. NS_ASSUME_NONNULL_BEGIN
  18. /**
  19. * Sentinel values that can be used when writing document fields with `setData()` or `updateData()`.
  20. */
  21. NS_SWIFT_NAME(FieldValue)
  22. @interface FIRFieldValue : NSObject
  23. /** :nodoc: */
  24. - (instancetype)init NS_UNAVAILABLE;
  25. /** Used with `updateData()` to mark a field for deletion. */
  26. // clang-format off
  27. + (instancetype)fieldValueForDelete NS_SWIFT_NAME(delete());
  28. // clang-format on
  29. /**
  30. * Used with `setData()` or `updateData()` to include a server-generated timestamp in the written
  31. * data.
  32. */
  33. + (instancetype)fieldValueForServerTimestamp NS_SWIFT_NAME(serverTimestamp());
  34. /**
  35. * Returns a special value that can be used with `setData()` or `updateData()` that tells the server
  36. * to union the given elements with any array value that already exists on the server. Each
  37. * specified element that doesn't already exist in the array will be added to the end. If the
  38. * field being modified is not already an array it will be overwritten with an array containing
  39. * exactly the specified elements.
  40. *
  41. * @param elements The elements to union into the array.
  42. * @return The `FieldValue` sentinel for use in a call to `setData()` or `updateData()`.
  43. */
  44. + (instancetype)fieldValueForArrayUnion:(NSArray<id> *)elements NS_SWIFT_NAME(arrayUnion(_:));
  45. /**
  46. * Returns a special value that can be used with `setData()` or `updateData()` that tells the server
  47. * to remove the given elements from any array value that already exists on the server. All
  48. * instances of each element specified will be removed from the array. If the field being
  49. * modified is not already an array it will be overwritten with an empty array.
  50. *
  51. * @param elements The elements to remove from the array.
  52. * @return The `FieldValue` sentinel for use in a call to `setData()` or `updateData()`.
  53. */
  54. + (instancetype)fieldValueForArrayRemove:(NSArray<id> *)elements NS_SWIFT_NAME(arrayRemove(_:));
  55. /**
  56. * Returns a special value that can be used with `setData()` or `updateData()` that tells the server
  57. * to increment the field's current value by the given value.
  58. *
  59. * If the current value is an integer or a double, both the current and the given value will be
  60. * interpreted as doubles and all arithmetic will follow IEEE 754 semantics. Otherwise, the
  61. * transformation will set the field to the given value.
  62. *
  63. * @param d The double value to increment by.
  64. * @return The `FieldValue` sentinel for use in a call to `setData()` or `updateData()`.
  65. */
  66. + (instancetype)fieldValueForDoubleIncrement:(double)d NS_SWIFT_NAME(increment(_:));
  67. /**
  68. * Returns a special value that can be used with `setData()` or `updateData()` that tells the server
  69. * to increment the field's current value by the given value.
  70. *
  71. * If the current field value is an integer, possible integer overflows are resolved to LONG_MAX or
  72. * LONG_MIN. If the current field value is a double, both values will be interpreted as doubles and
  73. * the arithmetic will follow IEEE 754 semantics.
  74. *
  75. * If field is not an integer or double, or if the field does not yet exist, the transformation
  76. * will set the field to the given value.
  77. *
  78. * @param l The integer value to increment by.
  79. * @return The `FieldValue` sentinel for use in a call to `setData()` or `updateData()`.
  80. */
  81. + (instancetype)fieldValueForIntegerIncrement:(int64_t)l NS_SWIFT_NAME(increment(_:));
  82. @end
  83. NS_ASSUME_NONNULL_END