Skip to content
Merged
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
21 changes: 17 additions & 4 deletions src/RestSharp/RestClientExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@

using System.Runtime.CompilerServices;
using RestSharp.Extensions;
using RestSharp.Serializers;

namespace RestSharp;

Expand Down Expand Up @@ -352,8 +353,8 @@ [EnumeratorCancellation] CancellationToken cancellationToken
/// <summary>
/// Sets the <see cref="RestClient"/> to only use JSON
/// </summary>
/// <param name="client">The client instance</param>
/// <returns></returns>
/// <param name="client">Client instance to work with</param>
/// <returns>Reference to the client instance</returns>
public static RestClient UseJson(this RestClient client) {
client.Serializers.Remove(DataFormat.Xml);
client.AssignAcceptedContentTypes();
Expand All @@ -363,11 +364,23 @@ public static RestClient UseJson(this RestClient client) {
/// <summary>
/// Sets the <see cref="RestClient"/> to only use XML
/// </summary>
/// <param name="client"></param>
/// <returns></returns>
/// <param name="client">Client instance to work with</param>
/// <returns>Reference to the client instance</returns>
public static RestClient UseXml(this RestClient client) {
client.Serializers.Remove(DataFormat.Json);
client.AssignAcceptedContentTypes();
return client;
}

/// <summary>
/// Sets the <see cref="RestClient"/> to only use the passed in custom serializer
/// </summary>
/// <param name="client">Client instance to work with</param>
/// <param name="serializerFactory">Function that returns the serializer instance</param>
/// <returns>Reference to the client instance</returns>
public static RestClient UseOnlySerializer(this RestClient client, Func<IRestSerializer> serializerFactory) {
client.Serializers.Clear();
client.UseSerializer(serializerFactory);
return client;
}
}
46 changes: 45 additions & 1 deletion test/RestSharp.Tests/RestClientTests.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
namespace RestSharp.Tests;
using RestSharp.Serializers.Json;

namespace RestSharp.Tests;

public class RestClientTests {
const string BaseUrl = "http://localhost:8888/";
Expand Down Expand Up @@ -58,4 +60,46 @@ public void BuildUri_should_build_with_passing_link_as_Uri_with_set_BaseUrl() {
// assert
new Uri(baseUrl, relative).Should().Be(builtUri);
}

[Fact]
public void UseJson_leaves_only_json_serializer() {
// arrange
var baseUrl = new Uri(BaseUrl);

// act
var client = new RestClient(baseUrl);
client.UseJson();

// assert
Assert.Single(client.Serializers);
Assert.True(client.Serializers.ContainsKey(DataFormat.Json));
}

[Fact]
public void UseXml_leaves_only_json_serializer() {
// arrange
var baseUrl = new Uri(BaseUrl);

// act
var client = new RestClient(baseUrl);
client.UseXml();

// assert
Assert.Single(client.Serializers);
Assert.True(client.Serializers.ContainsKey(DataFormat.Xml));
}

[Fact]
public void UseOnlySerializer_leaves_only_custom_serializer() {
// arrange
var baseUrl = new Uri(BaseUrl);

// act
var client = new RestClient(baseUrl);
client.UseOnlySerializer(() => new SystemTextJsonSerializer());

// assert
Assert.Single(client.Serializers);
Assert.True(client.Serializers.ContainsKey(DataFormat.Json));
}
}