public Task StoreSnapshotAsync <TSnapshot>(
            ThingyId thingyId,
            int aggregateSequenceNumber,
            TSnapshot snapshot)
            where TSnapshot : ISnapshot
        {
            var snapshotDefinition = SnapshotDefinitionService.GetDefinition(typeof(TSnapshot));
            var snapshotMetadata   = new SnapshotMetadata
            {
                AggregateId             = thingyId.Value,
                AggregateName           = "ThingyAggregate",
                AggregateSequenceNumber = aggregateSequenceNumber,
                SnapshotName            = snapshotDefinition.Name,
                SnapshotVersion         = snapshotDefinition.Version,
            };

            return(SnapshotPersistence.SetSnapshotAsync(
                       typeof(ThingyAggregate),
                       thingyId,
                       new SerializedSnapshot(
                           JsonConvert.SerializeObject(snapshotMetadata),
                           JsonConvert.SerializeObject(snapshot),
                           snapshotMetadata),
                       CancellationToken.None));
        }