Skip to content

Commit

Permalink
**TEMP** Squashed commits from #1091 and #1093. Should rebase on mast…
Browse files Browse the repository at this point in the history
…er before merge.
  • Loading branch information
Bart Koelman committed Oct 11, 2021
1 parent 4754049 commit 4bfe551
Show file tree
Hide file tree
Showing 498 changed files with 8,926 additions and 8,515 deletions.
2 changes: 1 addition & 1 deletion benchmarks/BenchmarkResource.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
namespace Benchmarks
{
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
public sealed class BenchmarkResource : Identifiable
public sealed class BenchmarkResource : Identifiable<int>
{
[Attr(PublicName = BenchmarkResourcePublicNames.NameAttr)]
public string Name { get; set; }
Expand Down
122 changes: 122 additions & 0 deletions benchmarks/Deserialization/DeserializationBenchmarkBase.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.Design;
using System.Text.Json;
using JetBrains.Annotations;
using JsonApiDotNetCore.Configuration;
using JsonApiDotNetCore.Middleware;
using JsonApiDotNetCore.Resources;
using JsonApiDotNetCore.Resources.Annotations;
using JsonApiDotNetCore.Serialization.JsonConverters;
using JsonApiDotNetCore.Serialization.Request.Adapters;
using Microsoft.Extensions.Logging.Abstractions;

namespace Benchmarks.Deserialization
{
public abstract class DeserializationBenchmarkBase
{
protected readonly JsonSerializerOptions SerializerReadOptions;
protected readonly DocumentAdapter DocumentAdapter;

protected DeserializationBenchmarkBase()
{
var options = new JsonApiOptions();
IResourceGraph resourceGraph = new ResourceGraphBuilder(options, NullLoggerFactory.Instance).Add<ResourceA>().Build();
options.SerializerOptions.Converters.Add(new ResourceObjectConverter(resourceGraph));
SerializerReadOptions = ((IJsonApiOptions)options).SerializerReadOptions;

var serviceContainer = new ServiceContainer();
var resourceFactory = new ResourceFactory(serviceContainer);
var resourceDefinitionAccessor = new ResourceDefinitionAccessor(resourceGraph, serviceContainer);

serviceContainer.AddService(typeof(IResourceDefinitionAccessor), resourceDefinitionAccessor);
serviceContainer.AddService(typeof(IResourceDefinition<ResourceA, int>), new JsonApiResourceDefinition<ResourceA, int>(resourceGraph));

// ReSharper disable once VirtualMemberCallInConstructor
JsonApiRequest request = CreateJsonApiRequest(resourceGraph);
var targetedFields = new TargetedFields();

var resourceIdentifierObjectAdapter = new ResourceIdentifierObjectAdapter(resourceGraph, resourceFactory);
var relationshipDataAdapter = new RelationshipDataAdapter(resourceIdentifierObjectAdapter);
var resourceObjectAdapter = new ResourceObjectAdapter(resourceGraph, resourceFactory, options, relationshipDataAdapter);
var resourceDataAdapter = new ResourceDataAdapter(resourceDefinitionAccessor, resourceObjectAdapter);

var atomicReferenceAdapter = new AtomicReferenceAdapter(resourceGraph, resourceFactory);
var atomicOperationResourceDataAdapter = new ResourceDataInOperationsRequestAdapter(resourceDefinitionAccessor, resourceObjectAdapter);

var atomicOperationObjectAdapter = new AtomicOperationObjectAdapter(options, atomicReferenceAdapter,
atomicOperationResourceDataAdapter, relationshipDataAdapter);

var resourceDocumentAdapter = new DocumentInResourceOrRelationshipRequestAdapter(options, resourceDataAdapter, relationshipDataAdapter);
var operationsDocumentAdapter = new DocumentInOperationsRequestAdapter(options, atomicOperationObjectAdapter);

DocumentAdapter = new DocumentAdapter(request, targetedFields, resourceDocumentAdapter, operationsDocumentAdapter);
}

protected abstract JsonApiRequest CreateJsonApiRequest(IResourceGraph resourceGraph);

[UsedImplicitly(ImplicitUseTargetFlags.Members)]
public sealed class ResourceA : Identifiable<int>
{
[Attr]
public bool Attribute01 { get; set; }

[Attr]
public char Attribute02 { get; set; }

[Attr]
public ulong? Attribute03 { get; set; }

[Attr]
public decimal Attribute04 { get; set; }

[Attr]
public float? Attribute05 { get; set; }

[Attr]
public string Attribute06 { get; set; }

[Attr]
public DateTime? Attribute07 { get; set; }

[Attr]
public DateTimeOffset? Attribute08 { get; set; }

[Attr]
public TimeSpan? Attribute09 { get; set; }

[Attr]
public DayOfWeek Attribute10 { get; set; }

[HasOne]
public ResourceA Single1 { get; set; }

[HasOne]
public ResourceA Single2 { get; set; }

[HasOne]
public ResourceA Single3 { get; set; }

[HasOne]
public ResourceA Single4 { get; set; }

[HasOne]
public ResourceA Single5 { get; set; }

[HasMany]
public ISet<ResourceA> Multi1 { get; set; }

[HasMany]
public ISet<ResourceA> Multi2 { get; set; }

[HasMany]
public ISet<ResourceA> Multi3 { get; set; }

[HasMany]
public ISet<ResourceA> Multi4 { get; set; }

[HasMany]
public ISet<ResourceA> Multi5 { get; set; }
}
}
}
Loading

0 comments on commit 4bfe551

Please sign in to comment.