DocumentSnapshot+ReadDecodable.swift 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. /*
  2. * Copyright 2019 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
  17. import FirebaseFirestore
  18. extension DocumentSnapshot {
  19. /// Retrieves all fields in a document and converts them to an instance of
  20. /// caller-specified type. Returns `nil` if the document does not exist.
  21. ///
  22. /// See `Firestore.Decoder` for more details about the decoding process.
  23. ///
  24. /// - Parameters
  25. /// - type: The type to convert the document fields to.
  26. /// - decoder: The decoder to use to convert the document. `nil` to use
  27. /// default decoder.
  28. public func data<T: Decodable>(as type: T.Type,
  29. decoder: Firestore.Decoder? = nil) throws -> T? {
  30. var d = decoder
  31. if d == nil {
  32. d = Firestore.Decoder()
  33. }
  34. if let data = data() {
  35. return try d?.decode(T.self, from: data, in: reference)
  36. }
  37. return nil
  38. }
  39. }