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); }