prepareBatchBody method

  1. @override
Future<({List<int> body, Map<String, String> extraHeaders})> prepareBatchBody(
  1. List<Map<String, dynamic>> batch
)
override

Prepares the batch body bytes for sending.

Override this for custom serialization (e.g., gzip compression). The default implementation JSON-encodes the batch.

Returns a record with body bytes and optional extra headers.

Implementation

@override
Future<({List<int> body, Map<String, String> extraHeaders})> prepareBatchBody(
  List<Map<String, dynamic>> batch,
) async {
  if (useIsolate) {
    try {
      final prepared = await isolateManager.prepareBatch(
        batch: batch,
        compress: enableCompression,
      );
      final body = (prepared['body'] as List).cast<int>();
      final extraHeaders = <String, String>{};
      if (prepared['isCompressed'] == true) {
        extraHeaders['Content-Encoding'] = 'gzip';
      }
      return (body: body, extraHeaders: extraHeaders);
    } catch (_) {
      // Fallback to direct processing
    }
  }

  final jsonBody = jsonEncode(batch);
  final extraHeaders = <String, String>{};
  if (enableCompression) {
    final encoder = GZipCodec();
    extraHeaders['Content-Encoding'] = 'gzip';
    return (
      body: encoder.encode(utf8.encode(jsonBody)),
      extraHeaders: extraHeaders,
    );
  }
  return (body: utf8.encode(jsonBody), extraHeaders: extraHeaders);
}