Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using System;
using System.Text.Json;
using Kontur.Extern.Api.Client.ApiLevel.Json.Converters;
using Kontur.Extern.Api.Client.ApiLevel.Json.Converters.Docflows;
Expand All @@ -16,11 +17,14 @@ namespace Kontur.Extern.Api.Client.ApiLevel.Json
{
public static class JsonSerializerFactory
{
public static IJsonSerializer CreateJsonSerializer(ILog log, bool ignoreIndentation = false, bool ignoreNullValues = true)
public static IJsonSerializer CreateJsonSerializer(ILog log, bool ignoreIndentation = false, bool ignoreNullValues = true, Func<SystemTextJsonSerializerFactory>? setupSerializer = null)
{
var namingPolicy = new KebabCaseNamingPolicy();
return new SystemTextJsonSerializerFactory()
.WithNamingPolicy(namingPolicy)
var factory = new SystemTextJsonSerializerFactory();
if (setupSerializer is not null)
factory = setupSerializer();

return factory.WithNamingPolicy(namingPolicy)
.AddConverter(new UrnJsonConverter())
.AddConverter(new StringBasedValueTypesConverter())
.AddConverter(new DocflowConverter())
Expand Down
6 changes: 4 additions & 2 deletions src/Kontur.Extern.Api.Client/ExternFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
using Kontur.Extern.Api.Client.Http.Configurations;
using Kontur.Extern.Api.Client.Http.Options;
using Kontur.Extern.Api.Client.Http.Serialization;
using Kontur.Extern.Api.Client.Http.Serialization.SysTextJson;
using Vostok.Clusterclient.Core.Model;
using Vostok.Commons.Time;
using Vostok.Logging.Abstractions;
Expand All @@ -38,14 +39,15 @@ public IExtern Create(
IAuthenticator authenticator,
IExternHttpClient? api,
IHttpRequestFactory? httpRequestFactory,
ILog log)
ILog log,
Func<SystemTextJsonSerializerFactory>? setupSerializer = null)
{
contentManagementOptions ??= ContentManagementOptions.Default;
pollingStrategy ??= DefaultDelayPollingStrategy;
cryptoProvider ??= DefaultCryptoProvider;
requestTimeouts ??= new RequestTimeouts();

var jsonSerializer = JsonSerializerFactory.CreateJsonSerializer(log);
var jsonSerializer = JsonSerializerFactory.CreateJsonSerializer(log, setupSerializer: setupSerializer);
httpRequestFactory ??= CreateHttp(clientConfiguration, requestTimeouts, authenticator, jsonSerializer, log);
api ??= new ExternHttpClient(httpRequestFactory);
var services = new ExternClientServices(contentManagementOptions, httpRequestFactory, jsonSerializer, api, pollingStrategy, authenticator, cryptoProvider);
Expand Down