Skip to content

Commit

Permalink
restored MigrationSerializer
Browse files Browse the repository at this point in the history
  • Loading branch information
Carael committed Nov 7, 2024
1 parent 0893d0d commit c057171
Showing 1 changed file with 11 additions and 34 deletions.
45 changes: 11 additions & 34 deletions src/Migration/MigrationSerializer.cs
Original file line number Diff line number Diff line change
@@ -1,64 +1,41 @@
using System;
using MongoDB.Bson;
using MongoDB.Bson.IO;
using MongoDB.Bson.Serialization;
using MongoDB.Bson.Serialization.Serializers;

namespace MongoDB.Extensions.Migration;

class MigrationSerializer<T> : IBsonSerializer<T> where T : IVersioned
class MigrationSerializer<T> : BsonClassMapSerializer<T> where T : IVersioned

Check failure on line 8 in src/Migration/MigrationSerializer.cs

View workflow job for this annotation

GitHub Actions / tests

'MigrationSerializer<T>': cannot derive from sealed type 'BsonClassMapSerializer<T>'

Check failure on line 8 in src/Migration/MigrationSerializer.cs

View workflow job for this annotation

GitHub Actions / tests

'MigrationSerializer<T>': cannot derive from sealed type 'BsonClassMapSerializer<T>'
{
private readonly EntityContext _context;
private readonly MigrationRunner<T> _migrationRunner;
private readonly IBsonSerializer<T> _baseSerializer;

public MigrationSerializer(EntityContext context)
public MigrationSerializer(EntityContext context) : base(BsonClassMap.LookupClassMap(typeof(T)))
{
_context = context;
_migrationRunner = new MigrationRunner<T>(context);
_baseSerializer = BsonSerializer.LookupSerializer<T>();

if (_baseSerializer is MigrationSerializer<T>)
{
throw new InvalidOperationException("The base serializer cannot be an instance of MigrationSerializer<T> to prevent recursion.");
}
}

object IBsonSerializer.Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
{
return Deserialize(context, args);
}

public void Serialize(BsonSerializationContext context, BsonSerializationArgs args, object value)
{
if (value is T typedValue)
{
typedValue.Version = _context.Option.CurrentVersion;
_baseSerializer.Serialize(context, args, typedValue);
}
else
{
throw new ArgumentException($"Expected value to be of type {typeof(T)}, but was {value.GetType()}.", nameof(value));
}
}

public Type ValueType => typeof(T);

public void Serialize(BsonSerializationContext context, BsonSerializationArgs args, T value)
public override void Serialize(

Check failure on line 20 in src/Migration/MigrationSerializer.cs

View workflow job for this annotation

GitHub Actions / tests

'MigrationSerializer<T>.Serialize(BsonSerializationContext, BsonSerializationArgs, T)': no suitable method found to override

Check failure on line 20 in src/Migration/MigrationSerializer.cs

View workflow job for this annotation

GitHub Actions / tests

'MigrationSerializer<T>.Serialize(BsonSerializationContext, BsonSerializationArgs, T)': no suitable method found to override
BsonSerializationContext context,
BsonSerializationArgs args,
T value)
{
value.Version = _context.Option.CurrentVersion;
_baseSerializer.Serialize(context, args, value);
base.Serialize(context, args, value);
}

public T Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
public override T Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)

Check failure on line 29 in src/Migration/MigrationSerializer.cs

View workflow job for this annotation

GitHub Actions / tests

'MigrationSerializer<T>.Deserialize(BsonDeserializationContext, BsonDeserializationArgs)': no suitable method found to override

Check failure on line 29 in src/Migration/MigrationSerializer.cs

View workflow job for this annotation

GitHub Actions / tests

'MigrationSerializer<T>.Deserialize(BsonDeserializationContext, BsonDeserializationArgs)': no suitable method found to override
{
BsonDocument bsonDocument = BsonDocumentSerializer.Instance.Deserialize(context);

_migrationRunner.Run(bsonDocument);

var migratedContext = BsonDeserializationContext.CreateRoot(new BsonDocumentReader(bsonDocument));
var migratedContext =
BsonDeserializationContext.CreateRoot(new BsonDocumentReader(bsonDocument));

T entity = _baseSerializer.Deserialize(migratedContext, args);
T entity = base.Deserialize(migratedContext, args);

entity.Version = _context.Option.CurrentVersion;

Expand Down

0 comments on commit c057171

Please sign in to comment.