using System.Threading.Tasks; using Nethereum.ABI.FunctionEncoding.Attributes; using Nethereum.Contracts.QueryHandlers; using Nethereum.Hex.HexConvertors.Extensions; using Nethereum.RPC.Eth.DTOs; namespace Nethereum.Contracts.ContractHandlers { #if !DOTNET35 public abstract class ContractQueryHandlerBase : IContractQueryHandler where TFunctionMessage : FunctionMessage, new() { public Task QueryDeserializingToObjectAsync( TFunctionMessage functionMessage, string contractAddress, BlockParameter block = null) where TFunctionOutput : IFunctionOutputDTO, new() { var queryHandler = GetQueryDTOHandler(); return queryHandler.QueryAsync(contractAddress, functionMessage, block); } protected abstract QueryToDTOHandler GetQueryDTOHandler() where TFunctionOutput : IFunctionOutputDTO, new(); public Task QueryAsync( string contractAddress, TFunctionMessage functionMessage = null, BlockParameter block = null) { var queryHandler = GetQueryToSimpleTypeHandler(); return queryHandler.QueryAsync(contractAddress, functionMessage, block); } protected abstract QueryToSimpleTypeHandler GetQueryToSimpleTypeHandler(); public async Task QueryRawAsBytesAsync( string contractAddress, TFunctionMessage functionMessage = null, BlockParameter block = null) { var rawResult = await QueryRawAsync(contractAddress, functionMessage, block).ConfigureAwait(false); return rawResult.HexToByteArray(); } public Task QueryRawAsync( string contractAddress, TFunctionMessage functionMessage = null, BlockParameter block = null) { QueryRawHandler queryHandler = GetQueryRawHandler(); return queryHandler.QueryAsync(contractAddress, functionMessage, block); } protected abstract QueryRawHandler GetQueryRawHandler(); } #endif }