@@ -27,6 +27,7 @@ import SwiftProtobuf
2727@available ( iOS 15 . 0 , macOS 12 . 0 , tvOS 15 . 0 , watchOS 8 . 0 , * )
2828typealias FirebaseDataConnectAsyncClient =
2929 Google_Firebase_Dataconnect_V1beta_ConnectorServiceAsyncClient
30+ typealias FirebaseDataConnectGraphqlError = Google_Firebase_Dataconnect_V1beta_GraphqlError
3031
3132@available ( iOS 15 . 0 , macOS 12 . 0 , tvOS 15 . 0 , watchOS 8 . 0 , * )
3233actor GrpcClient : CustomStringConvertible {
@@ -148,7 +149,13 @@ actor GrpcClient: CustomStringConvertible {
148149 let resultsString = try results. jsonString ( )
149150 DataConnectLogger
150151 . debug ( " executeQuery() receives response: \( resultsString, privacy: . private) . " )
152+
151153 // Not doing error decoding here
154+ guard results. errors. isEmpty else {
155+ throw DataConnectError
156+ . operationExecutionFailed ( messages: createErrorJson ( errors: results. errors) )
157+ }
158+
152159 if let decodedResults = try codec. decode ( result: results. data, asType: resultType) {
153160 return OperationResult ( data: decodedResults)
154161 } else {
@@ -191,6 +198,12 @@ actor GrpcClient: CustomStringConvertible {
191198 let resultsString = try results. jsonString ( )
192199 DataConnectLogger
193200 . debug ( " executeMutation() receives response: \( resultsString, privacy: . private) . " )
201+
202+ guard results. errors. isEmpty else {
203+ throw DataConnectError
204+ . operationExecutionFailed ( messages: createErrorJson ( errors: results. errors) )
205+ }
206+
194207 if let decodedResults = try codec. decode ( result: results. data, asType: resultType) {
195208 return OperationResult ( data: decodedResults)
196209 } else {
@@ -206,6 +219,22 @@ actor GrpcClient: CustomStringConvertible {
206219 }
207220 }
208221
222+ private func createErrorJson( errors: [ FirebaseDataConnectGraphqlError ] ) -> String ? {
223+ var errorMessages = [ String] ( )
224+ for err in errors {
225+ errorMessages. append ( err. message)
226+ }
227+
228+ do {
229+ let jsonEncoder = JSONEncoder ( )
230+ let jsonData = try jsonEncoder. encode ( errorMessages)
231+ return String ( data: jsonData, encoding: . utf8)
232+ } catch {
233+ DataConnectLogger . error ( " Error encoding partial error list " )
234+ return nil
235+ }
236+ }
237+
209238 func createCallOptions( ) async -> CallOptions {
210239 var headers = HPACKHeaders ( )
211240
0 commit comments