Skip to content

Commit 9e4db37

Browse files
authored
Merge pull request #349 from iceljc/features/add-message-parser
add message parser
2 parents a6e34b8 + c8c3af8 commit 9e4db37

File tree

3 files changed

+78
-49
lines changed

3 files changed

+78
-49
lines changed

src/Infrastructure/BotSharp.Abstraction/Messaging/JsonConverters/RichContentJsonConverter .cs

Lines changed: 6 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
using BotSharp.Abstraction.Messaging.Enums;
2-
using BotSharp.Abstraction.Messaging.Models.RichContent;
3-
using BotSharp.Abstraction.Messaging.Models.RichContent.Template;
1+
using BotSharp.Core.Messaging;
42
using System.Text.Json;
53

64
namespace BotSharp.Abstraction.Messaging.JsonConverters;
@@ -12,35 +10,16 @@ public class RichContentJsonConverter : JsonConverter<IRichMessage>
1210
using var jsonDoc = JsonDocument.ParseValue(ref reader);
1311
var root = jsonDoc.RootElement;
1412
var jsonText = root.GetRawText();
15-
JsonElement element;
16-
object? res = null;
13+
IRichMessage? res = null;
1714

18-
if (root.TryGetProperty("rich_type", out element))
15+
var parser = new MessageParser();
16+
if (root.TryGetProperty("rich_type", out JsonElement element))
1917
{
2018
var richType = element.GetString();
21-
if (richType == RichTypeEnum.ButtonTemplate)
22-
{
23-
res = JsonSerializer.Deserialize<ButtonTemplateMessage>(jsonText, options);
24-
}
25-
else if (richType == RichTypeEnum.MultiSelectTemplate)
26-
{
27-
res = JsonSerializer.Deserialize<MultiSelectTemplateMessage>(jsonText, options);
28-
}
29-
else if (richType == RichTypeEnum.QuickReply)
30-
{
31-
res = JsonSerializer.Deserialize<QuickReplyMessage>(jsonText, options);
32-
}
33-
else if (richType == RichTypeEnum.CouponTemplate)
34-
{
35-
res = JsonSerializer.Deserialize<CouponTemplateMessage>(jsonText, options);
36-
}
37-
else if (richType == RichTypeEnum.Text)
38-
{
39-
res = JsonSerializer.Deserialize<TextMessage>(jsonText, options);
40-
}
19+
res = parser.ParseRichMessage(richType, jsonText, options);
4120
}
4221

43-
return res as IRichMessage;
22+
return res;
4423
}
4524

4625
public override void Write(Utf8JsonWriter writer, IRichMessage value, JsonSerializerOptions options)

src/Infrastructure/BotSharp.Abstraction/Messaging/JsonConverters/TemplateMessageJsonConverter.cs

Lines changed: 6 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
using BotSharp.Abstraction.Messaging.Enums;
2-
using BotSharp.Abstraction.Messaging.Models.RichContent.Template;
1+
using BotSharp.Core.Messaging;
32
using System.Text.Json;
43

54
namespace BotSharp.Abstraction.Messaging.JsonConverters;
@@ -11,31 +10,16 @@ public class TemplateMessageJsonConverter : JsonConverter<ITemplateMessage>
1110
using var jsonDoc = JsonDocument.ParseValue(ref reader);
1211
var root = jsonDoc.RootElement;
1312
var jsonText = root.GetRawText();
14-
JsonElement element;
15-
object? res = null;
13+
ITemplateMessage? res = null;
1614

17-
if (root.TryGetProperty("template_type", out element))
15+
var parser = new MessageParser();
16+
if (root.TryGetProperty("template_type", out JsonElement element))
1817
{
1918
var templateType = element.GetString();
20-
if (templateType == TemplateTypeEnum.Button)
21-
{
22-
res = JsonSerializer.Deserialize<ButtonTemplateMessage>(jsonText, options);
23-
}
24-
else if (templateType == TemplateTypeEnum.MultiSelect)
25-
{
26-
res = JsonSerializer.Deserialize<MultiSelectTemplateMessage>(jsonText, options);
27-
}
28-
else if (templateType == TemplateTypeEnum.Coupon)
29-
{
30-
res = JsonSerializer.Deserialize<CouponTemplateMessage>(jsonText, options);
31-
}
32-
else if (templateType == TemplateTypeEnum.Product)
33-
{
34-
res = JsonSerializer.Deserialize<ProductTemplateMessage>(jsonText, options);
35-
}
19+
res = parser.ParseTemplateMessage(templateType, jsonText, options);
3620
}
3721

38-
return res as ITemplateMessage;
22+
return res;
3923
}
4024

4125
public override void Write(Utf8JsonWriter writer, ITemplateMessage value, JsonSerializerOptions options)
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
using BotSharp.Abstraction.Messaging;
2+
using BotSharp.Abstraction.Messaging.Enums;
3+
using BotSharp.Abstraction.Messaging.Models.RichContent.Template;
4+
using BotSharp.Abstraction.Messaging.Models.RichContent;
5+
using System.Text.Json;
6+
7+
namespace BotSharp.Core.Messaging;
8+
9+
public class MessageParser
10+
{
11+
public MessageParser()
12+
{
13+
}
14+
15+
public IRichMessage? ParseRichMessage(string richType, string jsonText, JsonSerializerOptions options)
16+
{
17+
IRichMessage? res = null;
18+
19+
if (richType == RichTypeEnum.ButtonTemplate)
20+
{
21+
res = JsonSerializer.Deserialize<ButtonTemplateMessage>(jsonText, options);
22+
}
23+
else if (richType == RichTypeEnum.MultiSelectTemplate)
24+
{
25+
res = JsonSerializer.Deserialize<MultiSelectTemplateMessage>(jsonText, options);
26+
}
27+
else if (richType == RichTypeEnum.QuickReply)
28+
{
29+
res = JsonSerializer.Deserialize<QuickReplyMessage>(jsonText, options);
30+
}
31+
else if (richType == RichTypeEnum.CouponTemplate)
32+
{
33+
res = JsonSerializer.Deserialize<CouponTemplateMessage>(jsonText, options);
34+
}
35+
else if (richType == RichTypeEnum.Text)
36+
{
37+
res = JsonSerializer.Deserialize<TextMessage>(jsonText, options);
38+
}
39+
40+
return res;
41+
}
42+
43+
public ITemplateMessage? ParseTemplateMessage(string templateType, string jsonText, JsonSerializerOptions options)
44+
{
45+
ITemplateMessage? res = null;
46+
47+
if (templateType == TemplateTypeEnum.Button)
48+
{
49+
res = JsonSerializer.Deserialize<ButtonTemplateMessage>(jsonText, options);
50+
}
51+
else if (templateType == TemplateTypeEnum.MultiSelect)
52+
{
53+
res = JsonSerializer.Deserialize<MultiSelectTemplateMessage>(jsonText, options);
54+
}
55+
else if (templateType == TemplateTypeEnum.Coupon)
56+
{
57+
res = JsonSerializer.Deserialize<CouponTemplateMessage>(jsonText, options);
58+
}
59+
else if (templateType == TemplateTypeEnum.Product)
60+
{
61+
res = JsonSerializer.Deserialize<ProductTemplateMessage>(jsonText, options);
62+
}
63+
64+
return res;
65+
}
66+
}

0 commit comments

Comments
 (0)