public static ISerializationRegistry DefaultForSnapshot <T>(this ISerializationRegistry registry)
     where T : class
 {
     return(registry
            .RegisterSnapshotSerializer <T>((e, m) => JObject.FromObject(e, SerializationRegistry.DefaultSerializer))
            .RegisterSnapshotDeserializer((json, _) => json.ToObject <T>(SerializationRegistry.DefaultSerializer)));
 }
 public WithEncryptionRegistry(ISerializationRegistry registry, IKeyStore store)
 {
     _registry             = registry;
     _store                = store;
     _postprocessorFactory = s => d => store.Encrypt(s, d);
     _preprocessorFactory  = store.DecryptFactory;
 }
        public static ISerializationRegistry RegisterSnapshotDeserializer <T>(this ISerializationRegistry registry,
                                                                              Func <JObject, IReadOnlyMetadata, T> deserializer)
        {
            var r = (IRegisterSnapshotDeserializers)registry;

            r.Register(deserializer);
            return(registry);
        }
        public static ISerializationRegistry RegisterSnapshotSerializer <T>(this ISerializationRegistry registry,
                                                                            Func <T, IMetadata, JObject> serializer)
        {
            var r = (IRegisterSnapshotSerializers)registry;

            r.Register(serializer);
            return(registry);
        }
        public static ISerializationRegistry RegisterEventDeserializer(
            this ISerializationRegistry registry,
            Type scope,
            string type,
            int version,
            Func <JObject, IReadOnlyMetadata, Event> deserializer,
            CreatePreprocessor preprocessor = null)
        {
            var r = (IRegisterEventDeserializers)registry;

            r.Register(scope, type, version, (json, metadata) => new[] { deserializer(json, metadata) }, preprocessor);
            return(registry);
        }
        public static ISerializationRegistry RegisterEventSerializer <T>(
            this ISerializationRegistry registry,
            string typeName,
            int version,
            Func <T, IMetadata, JObject> serializer,
            CreatePostprocessor postprocessor = null
            ) where T : Event
        {
            var r = (IRegisterEventSerializers)registry;

            r.Register(typeName, version, serializer, postprocessor);
            return(registry);
        }
 public static ISerializationRegistry RegisterSerializers(ISerializationRegistry registry, IKeyStore store)
 {
     registry
     .WithEncryption(store)
     .DefaultForEvent <UserCreated>()
     .DefaultForEvent <EmailAddressVerificationRequested>()
     .DefaultForEvent <PasswordResetTokenCreated>()
     .DefaultForEvent <EmailAddressVerified>()
     .DefaultForEvent <PasswordResetRequested>()
     .DefaultForEvent <UserNameChanged>()
     .DefaultForEvent <PasswordSet>();
     registry
     .DefaultForEvent <LoginFailed>()
     .DefaultForEvent <LoginSucceeded>()
     .DefaultForEvent <AccountLockedOut>()
     .DefaultForEvent <AccountUnlocked>();
     return(registry);
 }
        public static ISerializationRegistry DefaultForEvent <T>(this ISerializationRegistry registry, CreatePostprocessor postSerialization = null, CreatePreprocessor preDeserialization = null)
            where T : Event
        {
            bool prePostIsValidEnough = (postSerialization != null && preDeserialization != null) ||
                                        (postSerialization == null && preDeserialization == null);

            if (!prePostIsValidEnough)
            {
                throw new ArgumentException("Both pre and post serialization must be specified or neither");
            }
            return(registry
                   .RegisterEventSerializer <T>(CamelCase(typeof(T).Name), 1,
                                                (e, m) => JObject.FromObject(e, SerializationRegistry.DefaultSerializer), postSerialization)
                   .RegisterEventDeserializer(typeof(object), CamelCase(typeof(T).Name), 1,
                                              (json, m) => {
                var e = json.ToObject <T>(SerializationRegistry.DefaultSerializer);
                var em = (IEvent)e;
                em.Metadata = (IMetadata)m;
                return e;
            }, preDeserialization));
        }
 public static ISerializationRegistry WithEncryption(this ISerializationRegistry registry, IKeyStore store)
 {
     return(new WithEncryptionRegistry(registry, store));
 }