Exemple #1
0
        void IRegisterEventDeserializers.Register(Type scope, string type, int version,
                                                  Func <JObject, IReadOnlyMetadata, IEnumerable <Event> > deserializer, CreatePreprocessor preprocessor)
        {
            preprocessor = preprocessor ?? DefaultPreprocessor;

            IEnumerable <Event> Deserialize(string scopeIdentity, byte[] data, IReadOnlyMetadata metadata)
            {
                if (!preprocessor(scopeIdentity)(data, out var processed))
                {
                    return(EmptyEventArray);
                }
                var json = ReadJson(processed);

                return(deserializer(json, metadata));
            }

            if (!_eventDeserializers.TryGetValue(scope, out var deserializers))
            {
                deserializers =
                    new Dictionary
                    <TypeAndVersion, Func <string, byte[], IReadOnlyMetadata, IEnumerable <Event> > >();
                _eventDeserializers[scope] = deserializers;
            }
            var tv = new TypeAndVersion(type, version);

            if (deserializers.ContainsKey(tv))
            {
                throw new InvalidOperationException(
                          $"Deserializer already registered for {type} with {version} in scope {(scope == typeof(object) ? "(global)" : scope.FullName)}");
            }

            deserializers.Add(tv, Deserialize);
        }
 public WithEncryptionRegistry(ISerializationRegistry registry, IKeyStore store)
 {
     _registry             = registry;
     _store                = store;
     _postprocessorFactory = s => d => store.Encrypt(s, d);
     _preprocessorFactory  = store.DecryptFactory;
 }
        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 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 void Register(Type scope, string name, int version, Func <JObject, IReadOnlyMetadata, IEnumerable <Event> > deserializer, CreatePreprocessor preprocessor)
 {
     _registry.Register(scope, name, version, deserializer, _preprocessorFactory);
 }