Skip to content

Commit ee3e776

Browse files
authored
Fix: TextMessageV2.Substitution type (#602)
This resolve #599.
1 parent 741e3f0 commit ee3e776

File tree

4 files changed

+64
-2
lines changed

4 files changed

+64
-2
lines changed

examples/echo_bot/server.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,15 @@ func main() {
6464
messaging_api.TextMessage{
6565
Text: message.Text,
6666
},
67+
messaging_api.TextMessageV2{
68+
Text: "Hello! {smile}",
69+
Substitution: map[string]messaging_api.SubstitutionObjectInterface{
70+
"smile": &messaging_api.EmojiSubstitutionObject{
71+
ProductId: "5ac1bfd5040ab15980c9b435",
72+
EmojiId: "002",
73+
},
74+
},
75+
},
6776
},
6877
},
6978
); err != nil {

generator/src/main/java/line/bot/generator/LineBotSdkGoGeneratorGenerator.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,11 @@ public Map<String, ModelsMap> postProcessAllModels(Map<String, ModelsMap> objs)
8282
var.getVendorExtensions().put("x-is-discriminator-array", true);
8383
model.getVendorExtensions().put("x-has-discriminator", true);
8484
System.out.println("UnmarshalJSON[]: " + model.name + " " + var.name + " " + var.baseType + " " + var.complexType);
85+
} else if (var.baseType.equals("map") && discriminators.contains(var.complexType)) {
86+
// TextMessageV2 contains `map[string]SubstitutionObject`.
87+
// in this case, baseType=map, complexType=SubstitutionObject
88+
// UnmarshalJSON is not needed for this case.
89+
var.getVendorExtensions().put("x-is-discriminator-map", true);
8590
} else if (discriminators.contains(var.dataType)) {
8691
var.getVendorExtensions().put("x-is-discriminator", true);
8792
model.getVendorExtensions().put("x-has-discriminator", true);
@@ -96,7 +101,10 @@ public Map<String, ModelsMap> postProcessAllModels(Map<String, ModelsMap> objs)
96101
}
97102

98103
private String type(CodegenModel model, CodegenProperty var) {
99-
boolean isDiscriminator = var.vendorExtensions.get("x-is-discriminator-array") != null || var.vendorExtensions.get("x-is-discriminator") != null;
104+
boolean isDiscriminator =
105+
var.vendorExtensions.get("x-is-discriminator-array") != null ||
106+
var.vendorExtensions.get("x-is-discriminator") != null ||
107+
var.vendorExtensions.get("x-is-discriminator-map") != null;
100108

101109
if (var.isEnum) {
102110
return model.classname + var.datatypeWithEnum;

linebot/messaging_api/model_text_message_v2.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ type TextMessageV2 struct {
4747
/**
4848
* A mapping that specifies substitutions for parts enclosed in {} within the `text` field.
4949
*/
50-
Substitution map[string]SubstitutionObject `json:"substitution,omitempty"`
50+
Substitution map[string]SubstitutionObjectInterface `json:"substitution,omitempty"`
5151

5252
/**
5353
* Quote token of the message you want to quote.
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package tests
2+
3+
import (
4+
"encoding/json"
5+
"strings"
6+
"testing"
7+
8+
"github.com/line/line-bot-sdk-go/v8/linebot/messaging_api"
9+
)
10+
11+
func TestTextMessageV2(t *testing.T) {
12+
req := &messaging_api.ReplyMessageRequest{
13+
ReplyToken: "JKLJDSFhkljdsjfkla",
14+
Messages: []messaging_api.MessageInterface{
15+
&messaging_api.TextMessageV2{
16+
Text: "Hello, {newbee}! {smile}",
17+
Substitution: map[string]messaging_api.SubstitutionObjectInterface{
18+
"newbee": &messaging_api.MentionSubstitutionObject{
19+
Mentionee: &messaging_api.UserMentionTarget{
20+
UserId: "U1234567890abcdef1234567890abcdef",
21+
},
22+
},
23+
"smile": &messaging_api.EmojiSubstitutionObject{
24+
ProductId: "5ac1bfd5040ab15980c9b435",
25+
EmojiId: "002",
26+
},
27+
},
28+
},
29+
},
30+
}
31+
encodedMsg, err := json.Marshal(req)
32+
if err != nil {
33+
t.Fatalf("Failed to encode message: %v", err)
34+
}
35+
encodedMsgStr := string(encodedMsg)
36+
if !strings.Contains(encodedMsgStr, `"type":"textV2"`) {
37+
t.Errorf("Encoded message doens't contains expected default value: %s", encodedMsgStr)
38+
}
39+
if !strings.Contains(encodedMsgStr, `"type":"mention"`) {
40+
t.Errorf("Encoded message doens't contains expected default value: %s", encodedMsgStr)
41+
}
42+
if !strings.Contains(encodedMsgStr, `"type":"emoji"`) {
43+
t.Errorf("Encoded message doens't contains expected default value: %s", encodedMsgStr)
44+
}
45+
}

0 commit comments

Comments
 (0)