11using System ;
22using System . Collections . Generic ;
3+ using System . IO ;
34using System . Linq ;
45using System . Threading . Tasks ;
56using Elasticsearch . Net ;
67
78namespace Nest
89{
10+ using GetAliasesConverter = Func < IElasticsearchResponse , Stream , GetAliasesResponse > ;
11+ using CrazyAliasesResponse = Dictionary < string , Dictionary < string , Dictionary < string , object > > > ;
12+
913 public partial class ElasticClient
1014 {
1115 /// <inheritdoc />
@@ -31,7 +35,10 @@ public IGetAliasesResponse GetAliases(Func<GetAliasesDescriptor, GetAliasesDescr
3135 {
3236 return this . Dispatch < GetAliasesDescriptor , GetAliasesQueryString , GetAliasesResponse > (
3337 getAliasesDescriptor ,
34- ( p , d ) => this . RawDispatch . IndicesGetAliasDispatch < GetAliasesResponse > ( p )
38+ ( p , d ) => this . RawDispatch . IndicesGetAliasDispatch < GetAliasesResponse > (
39+ p ,
40+ new GetAliasesConverter ( DeserializeGetAliasesResponse )
41+ )
3542 ) ;
3643 }
3744
@@ -40,8 +47,43 @@ public Task<IGetAliasesResponse> GetAliasesAsync(Func<GetAliasesDescriptor, GetA
4047 {
4148 return this . DispatchAsync < GetAliasesDescriptor , GetAliasesQueryString , GetAliasesResponse , IGetAliasesResponse > (
4249 getAliasesDescriptor ,
43- ( p , d ) => this . RawDispatch . IndicesGetAliasDispatchAsync < GetAliasesResponse > ( p )
50+ ( p , d ) => this . RawDispatch . IndicesGetAliasDispatchAsync < GetAliasesResponse > (
51+ p ,
52+ new GetAliasesConverter ( DeserializeGetAliasesResponse )
53+ )
4454 ) ;
4555 }
56+
57+ /// <inheritdoc />
58+ private GetAliasesResponse DeserializeGetAliasesResponse ( IElasticsearchResponse connectionStatus , Stream stream )
59+ {
60+ if ( ! connectionStatus . Success )
61+ return new GetAliasesResponse ( ) { ConnectionStatus = connectionStatus , IsValid = false } ;
62+
63+ var dict = this . Serializer . DeserializeInternal < CrazyAliasesResponse > ( stream ) ;
64+
65+ var d = new Dictionary < string , IList < string > > ( ) ;
66+
67+ foreach ( var kv in dict )
68+ {
69+ var indexDict = kv . Key ;
70+ var aliases = new List < string > ( ) ;
71+ if ( kv . Value != null && kv . Value . ContainsKey ( "aliases" ) )
72+ {
73+ var aliasDict = kv . Value [ "aliases" ] ;
74+ if ( aliasDict != null )
75+ aliases = aliasDict . Select ( kva => kva . Key ) . ToList ( ) ;
76+ }
77+
78+ d . Add ( indexDict , aliases ) ;
79+ }
80+
81+ return new GetAliasesResponse ( )
82+ {
83+ ConnectionStatus = connectionStatus ,
84+ IsValid = true ,
85+ Indices = d
86+ } ;
87+ }
4688 }
4789}
0 commit comments