nit: Utilize ValueTuples (#1393)
* Utilize ValueTuples (with polyfill) * Rebase and remove polyfill
This commit is contained in:
@@ -49,7 +49,7 @@ namespace Discord.Commands
|
||||
private readonly ConcurrentDictionary<Type, ModuleInfo> _typedModuleDefs;
|
||||
private readonly ConcurrentDictionary<Type, ConcurrentDictionary<Type, TypeReader>> _typeReaders;
|
||||
private readonly ConcurrentDictionary<Type, TypeReader> _defaultTypeReaders;
|
||||
private readonly ImmutableList<Tuple<Type, Type>> _entityTypeReaders; //TODO: Candidate for C#7 Tuple
|
||||
private readonly ImmutableList<(Type EntityType, Type TypeReaderType)> _entityTypeReaders;
|
||||
private readonly HashSet<ModuleInfo> _moduleDefs;
|
||||
private readonly CommandMap _map;
|
||||
|
||||
@@ -124,11 +124,11 @@ namespace Discord.Commands
|
||||
_defaultTypeReaders[typeof(string)] =
|
||||
new PrimitiveTypeReader<string>((string x, out string y) => { y = x; return true; }, 0);
|
||||
|
||||
var entityTypeReaders = ImmutableList.CreateBuilder<Tuple<Type, Type>>();
|
||||
entityTypeReaders.Add(new Tuple<Type, Type>(typeof(IMessage), typeof(MessageTypeReader<>)));
|
||||
entityTypeReaders.Add(new Tuple<Type, Type>(typeof(IChannel), typeof(ChannelTypeReader<>)));
|
||||
entityTypeReaders.Add(new Tuple<Type, Type>(typeof(IRole), typeof(RoleTypeReader<>)));
|
||||
entityTypeReaders.Add(new Tuple<Type, Type>(typeof(IUser), typeof(UserTypeReader<>)));
|
||||
var entityTypeReaders = ImmutableList.CreateBuilder<(Type, Type)>();
|
||||
entityTypeReaders.Add((typeof(IMessage), typeof(MessageTypeReader<>)));
|
||||
entityTypeReaders.Add((typeof(IChannel), typeof(ChannelTypeReader<>)));
|
||||
entityTypeReaders.Add((typeof(IRole), typeof(RoleTypeReader<>)));
|
||||
entityTypeReaders.Add((typeof(IUser), typeof(UserTypeReader<>)));
|
||||
_entityTypeReaders = entityTypeReaders.ToImmutable();
|
||||
}
|
||||
|
||||
@@ -408,7 +408,7 @@ namespace Discord.Commands
|
||||
var typeInfo = type.GetTypeInfo();
|
||||
if (typeInfo.IsEnum)
|
||||
return true;
|
||||
return _entityTypeReaders.Any(x => type == x.Item1 || typeInfo.ImplementedInterfaces.Contains(x.Item2));
|
||||
return _entityTypeReaders.Any(x => type == x.EntityType || typeInfo.ImplementedInterfaces.Contains(x.TypeReaderType));
|
||||
}
|
||||
internal void AddNullableTypeReader(Type valueType, TypeReader valueTypeReader)
|
||||
{
|
||||
@@ -439,9 +439,9 @@ namespace Discord.Commands
|
||||
//Is this an entity?
|
||||
for (int i = 0; i < _entityTypeReaders.Count; i++)
|
||||
{
|
||||
if (type == _entityTypeReaders[i].Item1 || typeInfo.ImplementedInterfaces.Contains(_entityTypeReaders[i].Item1))
|
||||
if (type == _entityTypeReaders[i].EntityType || typeInfo.ImplementedInterfaces.Contains(_entityTypeReaders[i].EntityType))
|
||||
{
|
||||
reader = Activator.CreateInstance(_entityTypeReaders[i].Item2.MakeGenericType(type)) as TypeReader;
|
||||
reader = Activator.CreateInstance(_entityTypeReaders[i].TypeReaderType.MakeGenericType(type)) as TypeReader;
|
||||
_defaultTypeReaders[type] = reader;
|
||||
return reader;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user