Skip to content

Commit eb34261

Browse files
Address typing issue with CRM and Ticketing RemoteField POST (#18)
Co-authored-by: fern-api <115122769+fern-api[bot]@users.noreply.github.com>
1 parent 4039195 commit eb34261

File tree

7 files changed

+217
-37
lines changed

7 files changed

+217
-37
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ publishing {
4040
maven(MavenPublication) {
4141
groupId = 'dev.merge'
4242
artifactId = 'merge-java-client'
43-
version = '0.1.3'
43+
version = '0.1.4'
4444
from components.java
4545
}
4646
}

src/main/java/com/merge/api/MergeApiClient.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ public class MergeApiClient {
1717

1818
protected final Supplier<CrmClient> crmClient;
1919

20-
protected final Supplier<HrisClient> hrisClient;
21-
2220
protected final Supplier<FilestorageClient> filestorageClient;
2321

22+
protected final Supplier<HrisClient> hrisClient;
23+
2424
protected final Supplier<TicketingClient> ticketingClient;
2525

2626
protected final Supplier<AccountingClient> accountingClient;
@@ -29,8 +29,8 @@ public MergeApiClient(ClientOptions clientOptions) {
2929
this.clientOptions = clientOptions;
3030
this.atsClient = Suppliers.memoize(() -> new AtsClient(clientOptions));
3131
this.crmClient = Suppliers.memoize(() -> new CrmClient(clientOptions));
32-
this.hrisClient = Suppliers.memoize(() -> new HrisClient(clientOptions));
3332
this.filestorageClient = Suppliers.memoize(() -> new FilestorageClient(clientOptions));
33+
this.hrisClient = Suppliers.memoize(() -> new HrisClient(clientOptions));
3434
this.ticketingClient = Suppliers.memoize(() -> new TicketingClient(clientOptions));
3535
this.accountingClient = Suppliers.memoize(() -> new AccountingClient(clientOptions));
3636
}
@@ -43,14 +43,14 @@ public CrmClient crm() {
4343
return this.crmClient.get();
4444
}
4545

46-
public HrisClient hris() {
47-
return this.hrisClient.get();
48-
}
49-
5046
public FilestorageClient filestorage() {
5147
return this.filestorageClient.get();
5248
}
5349

50+
public HrisClient hris() {
51+
return this.hrisClient.get();
52+
}
53+
5454
public TicketingClient ticketing() {
5555
return this.ticketingClient.get();
5656
}

src/main/java/com/merge/api/core/ClientOptions.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ private ClientOptions(
2323
this.headers = new HashMap<>();
2424
this.headers.putAll(headers);
2525
this.headers.putAll(Map.of(
26-
"X-Fern-SDK-Name", "com.merge.fern:api-sdk", "X-Fern-SDK-Version", "0.1.3", "X-Fern-Language", "JAVA"));
26+
"X-Fern-SDK-Name", "com.merge.fern:api-sdk", "X-Fern-SDK-Version", "0.1.4", "X-Fern-Language", "JAVA"));
2727
this.headerSuppliers = headerSuppliers;
2828
this.httpClient = httpClient;
2929
;

src/main/java/com/merge/api/resources/crm/types/RemoteField.java

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,29 +7,28 @@
77
import com.fasterxml.jackson.annotation.Nulls;
88
import com.fasterxml.jackson.databind.JsonNode;
99
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
10-
import java.util.Map;
1110
import java.util.Objects;
1211
import java.util.Optional;
1312

1413
@JsonInclude(JsonInclude.Include.NON_EMPTY)
1514
@JsonDeserialize(builder = RemoteField.Builder.class)
1615
public final class RemoteField {
17-
private final RemoteFieldClass remoteFieldClass;
16+
private final RemoteFieldRemoteFieldClass remoteFieldClass;
1817

19-
private final Optional<Map<String, JsonNode>> value;
18+
private final Optional<JsonNode> value;
2019

21-
private RemoteField(RemoteFieldClass remoteFieldClass, Optional<Map<String, JsonNode>> value) {
20+
private RemoteField(RemoteFieldRemoteFieldClass remoteFieldClass, Optional<JsonNode> value) {
2221
this.remoteFieldClass = remoteFieldClass;
2322
this.value = value;
2423
}
2524

2625
@JsonProperty("remote_field_class")
27-
public RemoteFieldClass getRemoteFieldClass() {
26+
public RemoteFieldRemoteFieldClass getRemoteFieldClass() {
2827
return remoteFieldClass;
2928
}
3029

3130
@JsonProperty("value")
32-
public Optional<Map<String, JsonNode>> getValue() {
31+
public Optional<JsonNode> getValue() {
3332
return value;
3433
}
3534

@@ -58,24 +57,24 @@ public static RemoteFieldClassStage builder() {
5857
}
5958

6059
public interface RemoteFieldClassStage {
61-
_FinalStage remoteFieldClass(RemoteFieldClass remoteFieldClass);
60+
_FinalStage remoteFieldClass(RemoteFieldRemoteFieldClass remoteFieldClass);
6261

6362
Builder from(RemoteField other);
6463
}
6564

6665
public interface _FinalStage {
6766
RemoteField build();
6867

69-
_FinalStage value(Optional<Map<String, JsonNode>> value);
68+
_FinalStage value(Optional<JsonNode> value);
7069

71-
_FinalStage value(Map<String, JsonNode> value);
70+
_FinalStage value(JsonNode value);
7271
}
7372

7473
@JsonIgnoreProperties(ignoreUnknown = true)
7574
public static final class Builder implements RemoteFieldClassStage, _FinalStage {
76-
private RemoteFieldClass remoteFieldClass;
75+
private RemoteFieldRemoteFieldClass remoteFieldClass;
7776

78-
private Optional<Map<String, JsonNode>> value = Optional.empty();
77+
private Optional<JsonNode> value = Optional.empty();
7978

8079
private Builder() {}
8180

@@ -88,20 +87,20 @@ public Builder from(RemoteField other) {
8887

8988
@Override
9089
@JsonSetter("remote_field_class")
91-
public _FinalStage remoteFieldClass(RemoteFieldClass remoteFieldClass) {
90+
public _FinalStage remoteFieldClass(RemoteFieldRemoteFieldClass remoteFieldClass) {
9291
this.remoteFieldClass = remoteFieldClass;
9392
return this;
9493
}
9594

9695
@Override
97-
public _FinalStage value(Map<String, JsonNode> value) {
96+
public _FinalStage value(JsonNode value) {
9897
this.value = Optional.of(value);
9998
return this;
10099
}
101100

102101
@Override
103102
@JsonSetter(value = "value", nulls = Nulls.SKIP)
104-
public _FinalStage value(Optional<Map<String, JsonNode>> value) {
103+
public _FinalStage value(Optional<JsonNode> value) {
105104
this.value = value;
106105
return this;
107106
}
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
package com.merge.api.resources.crm.types;
2+
3+
import com.fasterxml.jackson.annotation.JsonValue;
4+
import com.fasterxml.jackson.core.JsonParseException;
5+
import com.fasterxml.jackson.core.JsonParser;
6+
import com.fasterxml.jackson.databind.DeserializationContext;
7+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
8+
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
9+
import com.merge.api.core.ObjectMappers;
10+
import java.io.IOException;
11+
import java.util.Objects;
12+
13+
@JsonDeserialize(using = RemoteFieldRemoteFieldClass.Deserializer.class)
14+
public final class RemoteFieldRemoteFieldClass {
15+
private final Object value;
16+
17+
private final int type;
18+
19+
private RemoteFieldRemoteFieldClass(Object value, int type) {
20+
this.value = value;
21+
this.type = type;
22+
}
23+
24+
@JsonValue
25+
public Object get() {
26+
return this.value;
27+
}
28+
29+
public <T> T visit(Visitor<T> visitor) {
30+
if (this.type == 0) {
31+
return visitor.visit((String) this.value);
32+
} else if (this.type == 1) {
33+
return visitor.visit((RemoteFieldClass) this.value);
34+
}
35+
throw new IllegalStateException("Failed to visit value. This should never happen.");
36+
}
37+
38+
@Override
39+
public boolean equals(Object other) {
40+
if (this == other) return true;
41+
return other instanceof RemoteFieldRemoteFieldClass && equalTo((RemoteFieldRemoteFieldClass) other);
42+
}
43+
44+
private boolean equalTo(RemoteFieldRemoteFieldClass other) {
45+
return value.equals(other.value);
46+
}
47+
48+
@Override
49+
public int hashCode() {
50+
return Objects.hash(this.value);
51+
}
52+
53+
@Override
54+
public String toString() {
55+
return this.value.toString();
56+
}
57+
58+
public static RemoteFieldRemoteFieldClass of(String value) {
59+
return new RemoteFieldRemoteFieldClass(value, 0);
60+
}
61+
62+
public static RemoteFieldRemoteFieldClass of(RemoteFieldClass value) {
63+
return new RemoteFieldRemoteFieldClass(value, 1);
64+
}
65+
66+
public interface Visitor<T> {
67+
T visit(String value);
68+
69+
T visit(RemoteFieldClass value);
70+
}
71+
72+
static final class Deserializer extends StdDeserializer<RemoteFieldRemoteFieldClass> {
73+
Deserializer() {
74+
super(RemoteFieldRemoteFieldClass.class);
75+
}
76+
77+
@Override
78+
public RemoteFieldRemoteFieldClass deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
79+
Object value = p.readValueAs(Object.class);
80+
try {
81+
return of(ObjectMappers.JSON_MAPPER.convertValue(value, String.class));
82+
} catch (IllegalArgumentException e) {
83+
}
84+
try {
85+
return of(ObjectMappers.JSON_MAPPER.convertValue(value, RemoteFieldClass.class));
86+
} catch (IllegalArgumentException e) {
87+
}
88+
throw new JsonParseException(p, "Failed to deserialize");
89+
}
90+
}
91+
}

src/main/java/com/merge/api/resources/ticketing/types/RemoteField.java

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,29 +7,28 @@
77
import com.fasterxml.jackson.annotation.Nulls;
88
import com.fasterxml.jackson.databind.JsonNode;
99
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
10-
import java.util.Map;
1110
import java.util.Objects;
1211
import java.util.Optional;
1312

1413
@JsonInclude(JsonInclude.Include.NON_EMPTY)
1514
@JsonDeserialize(builder = RemoteField.Builder.class)
1615
public final class RemoteField {
17-
private final RemoteFieldClass remoteFieldClass;
16+
private final RemoteFieldRemoteFieldClass remoteFieldClass;
1817

19-
private final Optional<Map<String, JsonNode>> value;
18+
private final Optional<JsonNode> value;
2019

21-
private RemoteField(RemoteFieldClass remoteFieldClass, Optional<Map<String, JsonNode>> value) {
20+
private RemoteField(RemoteFieldRemoteFieldClass remoteFieldClass, Optional<JsonNode> value) {
2221
this.remoteFieldClass = remoteFieldClass;
2322
this.value = value;
2423
}
2524

2625
@JsonProperty("remote_field_class")
27-
public RemoteFieldClass getRemoteFieldClass() {
26+
public RemoteFieldRemoteFieldClass getRemoteFieldClass() {
2827
return remoteFieldClass;
2928
}
3029

3130
@JsonProperty("value")
32-
public Optional<Map<String, JsonNode>> getValue() {
31+
public Optional<JsonNode> getValue() {
3332
return value;
3433
}
3534

@@ -58,24 +57,24 @@ public static RemoteFieldClassStage builder() {
5857
}
5958

6059
public interface RemoteFieldClassStage {
61-
_FinalStage remoteFieldClass(RemoteFieldClass remoteFieldClass);
60+
_FinalStage remoteFieldClass(RemoteFieldRemoteFieldClass remoteFieldClass);
6261

6362
Builder from(RemoteField other);
6463
}
6564

6665
public interface _FinalStage {
6766
RemoteField build();
6867

69-
_FinalStage value(Optional<Map<String, JsonNode>> value);
68+
_FinalStage value(Optional<JsonNode> value);
7069

71-
_FinalStage value(Map<String, JsonNode> value);
70+
_FinalStage value(JsonNode value);
7271
}
7372

7473
@JsonIgnoreProperties(ignoreUnknown = true)
7574
public static final class Builder implements RemoteFieldClassStage, _FinalStage {
76-
private RemoteFieldClass remoteFieldClass;
75+
private RemoteFieldRemoteFieldClass remoteFieldClass;
7776

78-
private Optional<Map<String, JsonNode>> value = Optional.empty();
77+
private Optional<JsonNode> value = Optional.empty();
7978

8079
private Builder() {}
8180

@@ -88,20 +87,20 @@ public Builder from(RemoteField other) {
8887

8988
@Override
9089
@JsonSetter("remote_field_class")
91-
public _FinalStage remoteFieldClass(RemoteFieldClass remoteFieldClass) {
90+
public _FinalStage remoteFieldClass(RemoteFieldRemoteFieldClass remoteFieldClass) {
9291
this.remoteFieldClass = remoteFieldClass;
9392
return this;
9493
}
9594

9695
@Override
97-
public _FinalStage value(Map<String, JsonNode> value) {
96+
public _FinalStage value(JsonNode value) {
9897
this.value = Optional.of(value);
9998
return this;
10099
}
101100

102101
@Override
103102
@JsonSetter(value = "value", nulls = Nulls.SKIP)
104-
public _FinalStage value(Optional<Map<String, JsonNode>> value) {
103+
public _FinalStage value(Optional<JsonNode> value) {
105104
this.value = value;
106105
return this;
107106
}

0 commit comments

Comments
 (0)