From d93b763226c97eaf9128f643fb56c756e2ba7560 Mon Sep 17 00:00:00 2001 From: AnandWalvekar Date: Wed, 1 Nov 2017 00:54:22 +0530 Subject: [PATCH] Expose whether a result was served from cache or fetched from the server (#176) Closes #170. --- Sources/Apollo/ApolloStore.swift | 2 +- Sources/Apollo/GraphQLResponse.swift | 4 ++-- Sources/Apollo/GraphQLResult.swift | 15 ++++++++++++--- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/Sources/Apollo/ApolloStore.swift b/Sources/Apollo/ApolloStore.swift index d2e8d21e74..a8ba6b5778 100644 --- a/Sources/Apollo/ApolloStore.swift +++ b/Sources/Apollo/ApolloStore.swift @@ -98,7 +98,7 @@ public final class ApolloStore { return try transaction.execute(selections: Query.Data.selections, onObjectWithKey: Query.rootCacheKey, variables: query.variables, accumulator: zip(mapper, dependencyTracker)) }.map { (data: Query.Data, dependentKeys: Set) in - GraphQLResult(data: data, errors: nil, dependentKeys: dependentKeys) + GraphQLResult(data: data, errors: nil, source:.cache, dependentKeys: dependentKeys) } } diff --git a/Sources/Apollo/GraphQLResponse.swift b/Sources/Apollo/GraphQLResponse.swift index c9695d9ba9..fc1332f074 100644 --- a/Sources/Apollo/GraphQLResponse.swift +++ b/Sources/Apollo/GraphQLResponse.swift @@ -31,10 +31,10 @@ public final class GraphQLResponse { return firstly { try executor.execute(selections: Operation.Data.selections, on: dataEntry, withKey: Operation.rootCacheKey, variables: operation.variables, accumulator: zip(mapper, normalizer, dependencyTracker)) }.map { (data, records, dependentKeys) in - (GraphQLResult(data: data, errors: errors, dependentKeys: dependentKeys), records) + (GraphQLResult(data: data, errors: errors, source: .server, dependentKeys: dependentKeys), records) } } else { - return Promise(fulfilled: (GraphQLResult(data: nil, errors: errors, dependentKeys: nil), nil)) + return Promise(fulfilled: (GraphQLResult(data: nil, errors: errors, source: .server, dependentKeys: nil), nil)) } } } diff --git a/Sources/Apollo/GraphQLResult.swift b/Sources/Apollo/GraphQLResult.swift index 8398cd778e..21f72b4262 100644 --- a/Sources/Apollo/GraphQLResult.swift +++ b/Sources/Apollo/GraphQLResult.swift @@ -1,15 +1,24 @@ /// Represents the result of a GraphQL operation. public struct GraphQLResult { + /// Represents source of data + public enum Source { + case cache + case server + } + /// The typed result data, or `nil` if an error was encountered that prevented a valid response. public let data: Data? /// A list of errors, or `nil` if the operation completed without encountering any errors. public let errors: [GraphQLError]? - + /// Source of data + public let source:Source + let dependentKeys: Set? - init(data: Data?, errors: [GraphQLError]?, dependentKeys: Set?) { + init(data: Data?, errors: [GraphQLError]?, source:Source, dependentKeys: Set?) { self.data = data self.errors = errors - self.dependentKeys = dependentKeys + self.dependentKeys = dependentKeys + self.source = source } }