@@ -19,6 +19,8 @@ class RNGrpc: RCTEventEmitter {
1919 var grpcInsecure = false
2020 var grpcHost : String ?
2121 var grpcResponseSizeLimit : Int ?
22+ var grpcCompression : Bool ?
23+ var grpcCompressorName : String ?
2224 var calls = [ Int: GrpcCall] ( )
2325
2426 deinit {
@@ -35,6 +37,12 @@ class RNGrpc: RCTEventEmitter {
3537 self . grpcHost = host
3638 }
3739
40+ @objc
41+ public func setCompression( _ enabled: NSNumber , compressorName: String ) {
42+ self . grpcCompression = enabled. boolValue
43+ self . grpcCompressorName = compressorName
44+ }
45+
3846 @objc
3947 public func setResponseSizeLimit( _ responseSizeLimit: NSNumber ) {
4048 self . grpcResponseSizeLimit = responseSizeLimit. intValue
@@ -43,7 +51,7 @@ class RNGrpc: RCTEventEmitter {
4351 @objc
4452 public func getResponseSizeLimit( _ resolve: @escaping RCTPromiseResolveBlock ,
4553 reject: @escaping RCTPromiseRejectBlock ) {
46- resolve ( self . grpcResponseSizeLimit) ;
54+ resolve ( self . grpcResponseSizeLimit)
4755 }
4856
4957 @objc
@@ -299,9 +307,29 @@ class RNGrpc: RCTEventEmitter {
299307 }
300308
301309 private func getCallOptionsWithHeaders( headers: HPACKHeaders ) -> CallOptions {
302- let encoding = ClientMessageEncoding . enabled (
303- . responsesOnly( acceptable: CompressionAlgorithm . all, decompressionLimit: . ratio( 20 ) )
304- )
310+ var encoding : ClientMessageEncoding = . disabled
311+
312+ if let enabled = self . grpcCompression, enabled {
313+ let compressionAlgorithm : [ CompressionAlgorithm ]
314+
315+ switch self . grpcCompressorName {
316+ case " gzip " :
317+ compressionAlgorithm = [ . gzip]
318+ case " deflate " :
319+ compressionAlgorithm = [ . deflate]
320+ case " identity " :
321+ compressionAlgorithm = [ . identity]
322+ default :
323+ compressionAlgorithm = CompressionAlgorithm . all
324+ }
325+
326+ encoding = ClientMessageEncoding . enabled (
327+ . init( forRequests: compressionAlgorithm. first,
328+ acceptableForResponses: compressionAlgorithm,
329+ decompressionLimit: . ratio( 20 )
330+ )
331+ )
332+ }
305333
306334 return CallOptions ( customMetadata: headers, messageEncoding: encoding)
307335 }
0 commit comments