@@ -6,53 +6,64 @@ namespace Kurrent.Client.Tests.Streams.Serialization;
6
6
// The scanning part and registration seems to be more robust there
7
7
// I used this for simplicity
8
8
public interface IMessageTypeMapper {
9
- void AddType < T > ( string eventTypeName ) ;
10
- void AddType ( Type eventType , string eventTypeName ) ;
9
+ void AddType < T > ( string messageTypeName ) ;
10
+ void AddType ( Type messageType , string eventTypeName ) ;
11
11
string ? GetTypeName < TEventType > ( ) ;
12
- string ? GetTypeName ( Type eventType ) ;
13
- Type ? GetClrType ( string eventTypeName ) ;
12
+ string ? GetTypeName ( Type messageType ) ;
13
+ string GetOrAddTypeName ( Type clrType , Func < Type , string > getTypeName ) ;
14
+ Type ? GetClrType ( string messageTypeName ) ;
15
+ Type ? GetOrAddClrType ( string messageTypeName , Func < string , Type ? > getClrType ) ;
14
16
}
15
17
16
18
public class MessageTypeMapper : IMessageTypeMapper {
17
19
public static readonly MessageTypeMapper Instance = new MessageTypeMapper ( ) ;
18
20
readonly ConcurrentDictionary < string , Type ? > _typeMap = new ( ) ;
19
21
readonly ConcurrentDictionary < Type , string > _typeNameMap = new ( ) ;
20
22
21
- public void AddType < T > ( string eventTypeName ) => AddType ( typeof ( T ) , eventTypeName ) ;
23
+ public void AddType < T > ( string messageTypeName ) => AddType ( typeof ( T ) , messageTypeName ) ;
22
24
23
- public void AddType ( Type eventType , string eventTypeName ) {
24
- _typeNameMap . AddOrUpdate ( eventType , eventTypeName , ( _ , typeName ) => typeName ) ;
25
- _typeMap . AddOrUpdate ( eventTypeName , eventType , ( _ , type ) => type ) ;
25
+ public void AddType ( Type messageType , string eventTypeName ) {
26
+ _typeNameMap . AddOrUpdate ( messageType , eventTypeName , ( _ , typeName ) => typeName ) ;
27
+ _typeMap . AddOrUpdate ( eventTypeName , messageType , ( _ , type ) => type ) ;
26
28
}
27
29
28
- public string ? GetTypeName < TEventType > ( ) => GetTypeName ( typeof ( TEventType ) ) ;
30
+ public string ? GetTypeName < TMessageType > ( ) => GetTypeName ( typeof ( TMessageType ) ) ;
29
31
30
- public string ? GetTypeName ( Type eventType ) =>
32
+ public string ? GetTypeName ( Type messageType ) =>
31
33
#if NET48
32
- _typeNameMap . TryGetValue ( eventType , out var typeName ) ? typeName : null ;
34
+ _typeNameMap . TryGetValue ( messageType , out var typeName ) ? typeName : null ;
33
35
#else
34
- _typeNameMap . GetValueOrDefault ( eventType ) ;
36
+ _typeNameMap . GetValueOrDefault ( messageType ) ;
35
37
#endif
38
+
39
+ public string GetOrAddTypeName ( Type clrType , Func < Type , string > getTypeName ) =>
40
+ _typeNameMap . GetOrAdd ( clrType ,
41
+ _ => {
42
+ var typeName = getTypeName ( clrType ) ;
43
+
44
+ _typeMap . TryAdd ( typeName , clrType ) ;
36
45
37
- public Type? GetClrType ( string eventTypeName ) =>
46
+ return typeName ;
47
+ } ) ;
48
+
49
+
50
+ public Type ? GetClrType ( string messageTypeName ) =>
38
51
#if NET48
39
- _typeMap . TryGetValue ( eventTypeName , out var clrType ) ? clrType : null ;
52
+ _typeMap . TryGetValue ( messageTypeName , out var clrType ) ? clrType : null ;
40
53
#else
41
- _typeMap . GetValueOrDefault ( eventTypeName ) ;
54
+ _typeMap . GetValueOrDefault ( messageTypeName ) ;
42
55
#endif
43
56
44
- public Type? GetClrTypeOrAdd ( string eventTypeName , Func < string , Type ? > getClrType ) =>
45
- _typeMap . GetOrAdd ( eventTypeName , getClrType ) ;
46
-
47
- // _ => {
48
- // var type = TypeProvider.GetFirstMatchingTypeFromCurrentDomainAssembly(eventTypeName);
49
- //
50
- // if (type == null)
51
- // return null;
52
- //
53
- // _typeNameMap.TryAdd(type, eventTypeName);
54
- //
55
- // return type;
56
- // }
57
- // );
57
+ public Type? GetOrAddClrType ( string messageTypeName , Func < string , Type ? > getClrType ) =>
58
+ _typeMap . GetOrAdd ( messageTypeName ,
59
+ _ => {
60
+ var clrType = getClrType ( messageTypeName ) ;
61
+
62
+ if ( clrType == null )
63
+ return null ;
64
+
65
+ _typeNameMap . TryAdd ( clrType , messageTypeName ) ;
66
+
67
+ return clrType ;
68
+ } ) ;
58
69
}
0 commit comments