Skip to content

Commit 2c600b3

Browse files
committed
problem: apis cannot be customized because have a single init point
solution: split connection config and actual apis into separate classes
1 parent 631efec commit 2c600b3

File tree

11 files changed

+63
-34
lines changed

11 files changed

+63
-34
lines changed

src/main/java/io/emeraldpay/grpc/BlockchainType.java renamed to src/main/java/io/emeraldpay/api/BlockchainType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.emeraldpay.grpc;
1+
package io.emeraldpay.api;
22

33
public enum BlockchainType {
44
BITCOIN,

src/main/java/io/emeraldpay/grpc/Chain.java renamed to src/main/java/io/emeraldpay/api/Chain.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16-
package io.emeraldpay.grpc;
16+
package io.emeraldpay.api;
1717

1818
public enum Chain {
1919

src/main/java/io/emeraldpay/grpc/EmeraldApi.java renamed to src/main/java/io/emeraldpay/api/EmeraldConnection.java

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,42 @@
1-
package io.emeraldpay.grpc;
1+
package io.emeraldpay.api;
22

3-
import io.emeraldpay.api.proto.ReactorBlockchainGrpc;
43
import io.grpc.Channel;
54
import io.grpc.ManagedChannelBuilder;
65
import io.grpc.netty.NettyChannelBuilder;
76

87
import java.io.IOException;
98
import java.net.InetAddress;
10-
import java.net.UnknownHostException;
119
import java.util.function.Function;
1210

1311
/**
14-
* Root of Emerald API service
12+
* A connection configuration to access Emerald APIs
1513
*/
16-
public class EmeraldApi {
14+
public class EmeraldConnection {
1715

18-
private final ReactorBlockchainGrpc.ReactorBlockchainStub blockchainStub;
16+
private final Channel channel;
1917

20-
private Channel channel;
18+
private EmeraldConnection(Channel channel) {
19+
this.channel = channel;
20+
}
2121

22-
private EmeraldApi(Channel channel) {
23-
blockchainStub = ReactorBlockchainGrpc.newReactorStub(channel);
22+
/**
23+
*
24+
* @return a default connection
25+
*/
26+
public static EmeraldConnection newDefault() {
27+
return newBuilder().build();
2428
}
2529

30+
/**
31+
* @return a default configuration builder
32+
* @see #newDefault()
33+
*/
2634
public static Builder newBuilder() {
2735
return new Builder();
2836
}
2937

30-
public static Builder newDevelopmentBuilder() {
31-
return new Builder().connectTo("api.emeraldpay.dev", 443);
32-
}
33-
34-
public ReactorBlockchainGrpc.ReactorBlockchainStub getBlockchainApi() {
35-
return blockchainStub;
38+
public Channel getChannel() {
39+
return channel;
3640
}
3741

3842
public static class Builder {
@@ -113,7 +117,7 @@ public Builder withChannelBuilder(Function<NettyChannelBuilder, ManagedChannelBu
113117
return this;
114118
}
115119

116-
protected void initDefaults() throws IOException {
120+
protected void initDefaults() {
117121
if (host == null) {
118122
host = "api.emrld.io";
119123
}
@@ -126,9 +130,8 @@ protected void initDefaults() throws IOException {
126130
* Build the API instance
127131
*
128132
* @return Emerald API instance
129-
* @throws Exception if some config params are invalid
130133
*/
131-
public EmeraldApi build() throws Exception {
134+
public EmeraldConnection build() {
132135
initDefaults();
133136

134137
NettyChannelBuilder nettyChannelBuilder = NettyChannelBuilder
@@ -150,7 +153,7 @@ public EmeraldApi build() throws Exception {
150153
channelBuilder = nettyChannelBuilder;
151154
}
152155

153-
return new EmeraldApi(channelBuilder.build());
156+
return new EmeraldConnection(channelBuilder.build());
154157
}
155158

156159

src/main/java/io/emeraldpay/grpc/blockchain/Addresses.java renamed to src/main/java/io/emeraldpay/api/blockchain/Addresses.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.emeraldpay.grpc.blockchain;
1+
package io.emeraldpay.api.blockchain;
22

33
import io.emeraldpay.api.proto.Common;
44

src/main/java/io/emeraldpay/grpc/blockchain/BalanceRequestBuilder.java renamed to src/main/java/io/emeraldpay/api/blockchain/BalanceRequestBuilder.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
package io.emeraldpay.grpc.blockchain;
1+
package io.emeraldpay.api.blockchain;
22

3+
import io.emeraldpay.api.Chain;
34
import io.emeraldpay.api.proto.BlockchainOuterClass;
45
import io.emeraldpay.api.proto.Common;
56
import io.emeraldpay.etherjar.domain.Address;
6-
import io.emeraldpay.grpc.BlockchainType;
7-
import io.emeraldpay.grpc.Chain;
7+
import io.emeraldpay.api.BlockchainType;
88

99
public class BalanceRequestBuilder {
1010

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package io.emeraldpay.api.blockchain;
2+
3+
import io.emeraldpay.api.EmeraldConnection;
4+
import io.emeraldpay.api.proto.ReactorBlockchainGrpc;
5+
6+
public class BlockchainApi {
7+
8+
private EmeraldConnection connection;
9+
private final ReactorBlockchainGrpc.ReactorBlockchainStub blockchainStub;
10+
11+
public BlockchainApi(EmeraldConnection connection) {
12+
this.connection = connection;
13+
this.blockchainStub = ReactorBlockchainGrpc.newReactorStub(connection.getChannel());
14+
}
15+
16+
/**
17+
* @return Reactive gRPC Stub for Blockchain APIs
18+
*/
19+
public ReactorBlockchainGrpc.ReactorBlockchainStub getReactorStub() {
20+
return blockchainStub;
21+
}
22+
23+
}

src/main/java/io/emeraldpay/grpc/blockchain/BlockchainRequest.java renamed to src/main/java/io/emeraldpay/api/blockchain/BlockchainRequest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.emeraldpay.grpc.blockchain;
1+
package io.emeraldpay.api.blockchain;
22

33
public class BlockchainRequest {
44

src/main/java/io/emeraldpay/grpc/blockchain/EstimateFeeRequestBuilder.java renamed to src/main/java/io/emeraldpay/api/blockchain/EstimateFeeRequestBuilder.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
package io.emeraldpay.grpc.blockchain;
1+
package io.emeraldpay.api.blockchain;
22

3+
import io.emeraldpay.api.Chain;
34
import io.emeraldpay.api.proto.BlockchainOuterClass;
4-
import io.emeraldpay.grpc.Chain;
55

66
public class EstimateFeeRequestBuilder {
77

src/test/groovy/io/emeraldpay/grpc/BlockchainTypeSpec.groovy renamed to src/test/groovy/io/emeraldpay/api/BlockchainTypeSpec.groovy

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
package io.emeraldpay.grpc
1+
package io.emeraldpay.api
2+
23

34
import spock.lang.Specification
45

src/test/groovy/io/emeraldpay/grpc/EmeraldApiBuilderSpec.groovy renamed to src/test/groovy/io/emeraldpay/api/EmeraldConnectionBuilderSpec.groovy

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
package io.emeraldpay.grpc
1+
package io.emeraldpay.api
2+
23

34
import spock.lang.Specification
45

5-
class EmeraldApiBuilderSpec extends Specification {
6+
class EmeraldConnectionBuilderSpec extends Specification {
67

78
def "Parse host with port"() {
89
when:
9-
def act = EmeraldApi.newBuilder()
10+
def act = EmeraldConnection.newBuilder()
1011
.connectTo("localhost:1234")
1112
then:
1213
act.port == 1234
@@ -15,7 +16,7 @@ class EmeraldApiBuilderSpec extends Specification {
1516

1617
def "Use host if only provided"() {
1718
when:
18-
def act = EmeraldApi.newBuilder()
19+
def act = EmeraldConnection.newBuilder()
1920
.connectTo("google.com")
2021
then:
2122
act.port == null

0 commit comments

Comments
 (0)