BlockMetadataConverterFactory.java

  1. /*
  2.  * @copyright defined in LICENSE.txt
  3.  */

  4. package hera.transport;

  5. import static hera.api.model.BytesValue.of;
  6. import static org.slf4j.LoggerFactory.getLogger;

  7. import hera.api.function.Function1;
  8. import hera.api.model.BlockHash;
  9. import hera.api.model.BlockHeader;
  10. import hera.api.model.BlockMetadata;
  11. import org.slf4j.Logger;
  12. import types.Blockchain;
  13. import types.Rpc;

  14. public class BlockMetadataConverterFactory {

  15.   protected final transient Logger logger = getLogger(getClass());

  16.   protected final ModelConverter<BlockHeader, Blockchain.BlockHeader> blockHeaderConverter =
  17.       new BlockHeaderConverterFactory().create();

  18.   protected final Function1<BlockMetadata,
  19.       Rpc.BlockMetadata> domainConverter = new Function1<BlockMetadata, Rpc.BlockMetadata>() {

  20.         @Override
  21.         public Rpc.BlockMetadata apply(BlockMetadata domainBlock) {
  22.           throw new UnsupportedOperationException();
  23.         }
  24.       };

  25.   protected final Function1<Rpc.BlockMetadata, BlockMetadata> rpcConverter =
  26.       new Function1<Rpc.BlockMetadata, BlockMetadata>() {

  27.         @Override
  28.         public BlockMetadata apply(final Rpc.BlockMetadata rpcBlockMetadata) {
  29.           logger.trace("Rpc block metadata to convert: {}", rpcBlockMetadata);
  30.           final BlockMetadata domainBlockMetadata = BlockMetadata.newBuilder()
  31.               .blockHash(new BlockHash(of(rpcBlockMetadata.getHash().toByteArray())))
  32.               .blockHeader(blockHeaderConverter.convertToDomainModel(rpcBlockMetadata.getHeader()))
  33.               .txCount(rpcBlockMetadata.getTxcount())
  34.               .blockSize(rpcBlockMetadata.getSize())
  35.               .build();
  36.           logger.trace("Domain block metadata converted: {}", domainBlockMetadata);
  37.           return domainBlockMetadata;
  38.         }
  39.       };

  40.   public ModelConverter<BlockMetadata, Rpc.BlockMetadata> create() {
  41.     return new ModelConverter<BlockMetadata, Rpc.BlockMetadata>(domainConverter, rpcConverter);
  42.   }

  43. }