Browse Source

Merge pull request #1136 from nextcloud/fix/dynamite/octet-stream-encoding

pull/1138/head
Kate 1 year ago committed by GitHub
parent
commit
92ace09b7f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 9
      packages/dynamite/dynamite/lib/src/models/type_result/base.dart
  2. 148
      packages/dynamite/dynamite_end_to_end_test/lib/request_body.openapi.dart
  3. 44
      packages/dynamite/dynamite_end_to_end_test/lib/request_body.openapi.json

9
packages/dynamite/dynamite/lib/src/models/type_result/base.dart

@ -30,7 +30,14 @@ class TypeResultBase extends TypeResult {
return '$object.toString()';
}
case 'application/octet-stream':
return 'utf8.encode($object) as Uint8List';
switch (className) {
case 'Uint8List':
return object;
case 'String':
return '(utf8.encode($object) as Uint8List)';
default:
throw Exception('"$mimeType" can only be Uint8List or String');
}
default:
throw Exception('Can not encode mime type "$mimeType"');
}

148
packages/dynamite/dynamite_end_to_end_test/lib/request_body.openapi.dart

@ -0,0 +1,148 @@
// ignore_for_file: camel_case_types
// ignore_for_file: discarded_futures
// ignore_for_file: public_member_api_docs
// ignore_for_file: unreachable_switch_case
import 'dart:convert';
import 'dart:typed_data';
import 'package:built_value/serializer.dart';
import 'package:built_value/standard_json_plugin.dart';
import 'package:dynamite_runtime/built_value.dart';
import 'package:dynamite_runtime/http_client.dart';
import 'package:meta/meta.dart';
import 'package:universal_io/io.dart';
class Client extends DynamiteClient {
Client(
super.baseURL, {
super.baseHeaders,
super.userAgent,
super.httpClient,
super.cookieJar,
});
Client.fromClient(final DynamiteClient client)
: super(
client.baseURL,
baseHeaders: client.baseHeaders,
httpClient: client.httpClient,
cookieJar: client.cookieJar,
authentications: client.authentications,
);
/// Returns a [Future] containing a [DynamiteResponse] with the status code, deserialized body and headers.
/// Throws a [DynamiteApiException] if the API call does not return an expected status code.
///
/// Status codes:
/// * default
///
/// See:
/// * [$getRaw] for an experimental operation that returns a [DynamiteRawResponse] that can be serialized.
Future<DynamiteResponse<void, void>> $get({final Uint8List? uint8List}) async {
final rawResponse = $getRaw(
uint8List: uint8List,
);
return rawResponse.future;
}
/// This method and the response it returns is experimental. The API might change without a major version bump.
///
/// Returns a [Future] containing a [DynamiteRawResponse] with the raw [HttpClientResponse] and serialization helpers.
/// Throws a [DynamiteApiException] if the API call does not return an expected status code.
///
/// Status codes:
/// * default
///
/// See:
/// * [$get] for an operation that returns a [DynamiteResponse] with a stable API.
@experimental
DynamiteRawResponse<void, void> $getRaw({final Uint8List? uint8List}) {
final queryParameters = <String, dynamic>{};
final headers = <String, String>{};
Uint8List? body;
headers['Content-Type'] = 'application/octet-stream';
if (uint8List != null) {
body = uint8List;
}
const path = '/';
final uri = Uri(path: path, queryParameters: queryParameters.isNotEmpty ? queryParameters : null);
return DynamiteRawResponse<void, void>(
response: executeRequest(
'get',
uri,
headers,
body,
null,
),
bodyType: null,
headersType: null,
serializers: _jsonSerializers,
);
}
/// Returns a [Future] containing a [DynamiteResponse] with the status code, deserialized body and headers.
/// Throws a [DynamiteApiException] if the API call does not return an expected status code.
///
/// Status codes:
/// * default
///
/// See:
/// * [postRaw] for an experimental operation that returns a [DynamiteRawResponse] that can be serialized.
Future<DynamiteResponse<void, void>> post({final String? string}) async {
final rawResponse = postRaw(
string: string,
);
return rawResponse.future;
}
/// This method and the response it returns is experimental. The API might change without a major version bump.
///
/// Returns a [Future] containing a [DynamiteRawResponse] with the raw [HttpClientResponse] and serialization helpers.
/// Throws a [DynamiteApiException] if the API call does not return an expected status code.
///
/// Status codes:
/// * default
///
/// See:
/// * [post] for an operation that returns a [DynamiteResponse] with a stable API.
@experimental
DynamiteRawResponse<void, void> postRaw({final String? string}) {
final queryParameters = <String, dynamic>{};
final headers = <String, String>{};
Uint8List? body;
headers['Content-Type'] = 'application/octet-stream';
if (string != null) {
body = utf8.encode(string) as Uint8List;
}
const path = '/';
final uri = Uri(path: path, queryParameters: queryParameters.isNotEmpty ? queryParameters : null);
return DynamiteRawResponse<void, void>(
response: executeRequest(
'post',
uri,
headers,
body,
null,
),
bodyType: null,
headersType: null,
serializers: _jsonSerializers,
);
}
}
// coverage:ignore-start
final Serializers _serializers = Serializers().toBuilder().build();
final Serializers _jsonSerializers = (_serializers.toBuilder()
..add(DynamiteDoubleSerializer())
..addPlugin(StandardJsonPlugin())
..addPlugin(const ContentStringPlugin()))
.build();
// coverage:ignore-end

44
packages/dynamite/dynamite_end_to_end_test/lib/request_body.openapi.json

@ -0,0 +1,44 @@
{
"openapi": "3.1.0",
"info": {
"title": "request body test",
"version": "0.0.1"
},
"paths": {
"/": {
"get": {
"requestBody": {
"content": {
"application/octet-stream": {
"schema": {
"type": "string",
"format": "binary"
}
}
}
},
"responses": {
"default": {
"description": ""
}
}
},
"post": {
"requestBody": {
"content": {
"application/octet-stream": {
"schema": {
"type": "string"
}
}
}
},
"responses": {
"default": {
"description": ""
}
}
}
}
}
}
Loading…
Cancel
Save