Skip to content

Commit 6bc78ab

Browse files
committed
feat: get rid of ffjson
1 parent 3a3670d commit 6bc78ab

File tree

7 files changed

+77
-62
lines changed

7 files changed

+77
-62
lines changed

go.mod

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@ module github.com/bots-go-framework/bots-fw-telegram
33
go 1.24.3
44

55
//replace github.com/bots-go-framework/bots-fw => ../bots-fw
6+
67
//replace github.com/bots-go-framework/bots-api-telegram => ../bots-api-telegram
78

89
//replace github.com/bots-go-framework/bots-fw-store => ../bots-fw-store
910

1011
require (
11-
github.com/bots-go-framework/bots-api-telegram v0.12.0
12-
github.com/bots-go-framework/bots-fw v0.62.2
12+
github.com/bots-go-framework/bots-api-telegram v0.13.0
13+
github.com/bots-go-framework/bots-fw v0.63.0
1314
github.com/bots-go-framework/bots-fw-store v0.10.0
1415
github.com/bots-go-framework/bots-fw-telegram-models v0.3.25
1516
github.com/dal-go/dalgo v0.23.0
16-
github.com/pquerna/ffjson v0.0.0-20190930134022-aa0246cd15f7
1717
github.com/strongo/i18n v0.8.2
1818
github.com/strongo/logus v0.2.1
1919
go.uber.org/mock v0.5.2

go.sum

Lines changed: 4 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,22 @@
11
github.com/alexsergivan/transliterator v1.0.1 h1:vON2ilWCHjq+S5Y4obhLGhHK4Y1VIhsHEtQlij5d9pI=
22
github.com/alexsergivan/transliterator v1.0.1/go.mod h1:0IrumukulURJ4PD0z6UcdJKP2job1DYDhnHAP5y+5pE=
3-
github.com/bots-go-framework/bots-api-telegram v0.12.0 h1:ygw4wj8O20VCmvADJPp/tj0KqCUEDCptFsoZzwyrN14=
4-
github.com/bots-go-framework/bots-api-telegram v0.12.0/go.mod h1:aY3y10SeCY4K3pHOrqOxXImjs8CfYD7n71Q5VZXKkJw=
5-
github.com/bots-go-framework/bots-fw v0.62.0 h1:ROQPzMFUu9tsIKojzsWAIUbLlhgauJd8B1p9lcefx6A=
6-
github.com/bots-go-framework/bots-fw v0.62.0/go.mod h1:fACVasEdjjSXL21nHbGFWaezOqlLiGXgYxYW9Qr6EbU=
7-
github.com/bots-go-framework/bots-fw v0.62.1 h1:BrkE1pRehWqYjfTa0CO3VA5bLFsOYydoj6zliEvHAg8=
8-
github.com/bots-go-framework/bots-fw v0.62.1/go.mod h1:3aXhU3PoKmpSuRCx1c/1qKTtEiH1Z8Kf6kCsdCEDJKs=
9-
github.com/bots-go-framework/bots-fw v0.62.2 h1:ZdTnBFjL9IYpuSUpMrF98ufy4Jr9jXU3o9Olb10pw0M=
10-
github.com/bots-go-framework/bots-fw v0.62.2/go.mod h1:vbsqXg2joAhogbVYOxOZAujdkgKilFS4I3pSKY11I8I=
3+
github.com/bots-go-framework/bots-api-telegram v0.13.0 h1:rhBDHZPLboTKQRPJD/ofE1JHnhEvb3ZaFwSDLCZPGOk=
4+
github.com/bots-go-framework/bots-api-telegram v0.13.0/go.mod h1:5RnWs0Gq8Tw5aaqxbr0cGf5aoJaiGVzU4VikmvP5vko=
5+
github.com/bots-go-framework/bots-fw v0.63.0 h1:clOdI5c4oCQyo8SbdVIuhZROyzaFMqeDc01N7GrCvF8=
6+
github.com/bots-go-framework/bots-fw v0.63.0/go.mod h1:vkhHJCCxyf0xhULmEyJEqs60Smp/zVqegMHwNBXgJvQ=
117
github.com/bots-go-framework/bots-fw-store v0.10.0 h1:e6bD274mjrHVp+X05/7uqqT3s5xZOqV9divKTaM2W+w=
128
github.com/bots-go-framework/bots-fw-store v0.10.0/go.mod h1:7oU4B8j5HuJZM8AftosbyQD+AqckXsDv8eU1auGPzn8=
13-
github.com/bots-go-framework/bots-fw-telegram-models v0.3.22 h1:BrZNhCb6NRW0JHtDqXLVDUE0f2AochHum33nAe4ZlZg=
14-
github.com/bots-go-framework/bots-fw-telegram-models v0.3.22/go.mod h1:zA/C08sUpvpvyUT1+WcnWjivGrd7SqmVqXjfmhx1JcY=
15-
github.com/bots-go-framework/bots-fw-telegram-models v0.3.23 h1:27CFIyGlydEHEg574LQwKh8GTR04BL7E26sbX/7LHsg=
16-
github.com/bots-go-framework/bots-fw-telegram-models v0.3.23/go.mod h1:8CsNLpqkK8aJcfsL0HK2Wsmy8wc/qlM5ixJAe4VIxzQ=
17-
github.com/bots-go-framework/bots-fw-telegram-models v0.3.24 h1:445vyvQNhnQogiwa9EG2zST8/s1bMu4prCvk/oe/oeU=
18-
github.com/bots-go-framework/bots-fw-telegram-models v0.3.24/go.mod h1:mUwYG59DOcnMh2ixdbWNc1xZepMnkp/4uaZtA47ECos=
199
github.com/bots-go-framework/bots-fw-telegram-models v0.3.25 h1:AH7TlCNJ19e4FhKy+4QpgnKv4Qulj2apbtl9BmSazYI=
2010
github.com/bots-go-framework/bots-fw-telegram-models v0.3.25/go.mod h1:sTiSMobMrMsGbP+XWiA2kgJoyrGPdceF5VHpyi7CLME=
2111
github.com/bots-go-framework/bots-go-core v0.0.3 h1:z3A7DLUgxbHWxvTCGnkHP9WHpTT9xxROEypoqAfvYIQ=
2212
github.com/bots-go-framework/bots-go-core v0.0.3/go.mod h1:XCn9z4TI8sbgwyus+VDzw7iMY2QCPWEAvl23GMDjeEU=
23-
github.com/dal-go/dalgo v0.21.1 h1:kJmOxiG4sF3djnfrv20w1III3YTpgjrR/Ih6Oq9k5oo=
24-
github.com/dal-go/dalgo v0.21.1/go.mod h1:BoMNGwDE9FdjynV7xCn5f/GdVJxvfePwjsMldn+BhqA=
25-
github.com/dal-go/dalgo v0.22.0 h1:lCUzWfwUHXtmVEzLkgmrWlZOrv39h9ZCfJw93ssBW+s=
26-
github.com/dal-go/dalgo v0.22.0/go.mod h1:BoMNGwDE9FdjynV7xCn5f/GdVJxvfePwjsMldn+BhqA=
2713
github.com/dal-go/dalgo v0.23.0 h1:zMDiCb1tz71241sN9SLnM3yebOI/yxHs23HsDL6dBks=
2814
github.com/dal-go/dalgo v0.23.0/go.mod h1:BoMNGwDE9FdjynV7xCn5f/GdVJxvfePwjsMldn+BhqA=
2915
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
3016
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
3117
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
3218
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
3319
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
34-
github.com/pquerna/ffjson v0.0.0-20190930134022-aa0246cd15f7 h1:xoIK0ctDddBMnc74udxJYBqlo9Ylnsp1waqjLsnef20=
35-
github.com/pquerna/ffjson v0.0.0-20190930134022-aa0246cd15f7/go.mod h1:YARuvh7BUWHNhzDq2OM5tzR2RiCcN2D7sapiKyCel/M=
3620
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
3721
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
3822
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
@@ -47,12 +31,6 @@ github.com/strongo/random v0.0.1 h1:OZHJBb/3uEa7OX8L2Dv2pLnSeewRmXMyTACoeto6O8I=
4731
github.com/strongo/random v0.0.1/go.mod h1:/pSI+SjBNLBkjljNtVdYr6ERddA+LqSa87o0/s+9iuU=
4832
github.com/strongo/slice v0.3.1 h1:VWkyYBgcVJn6Hs7wYhL9Vxwgb7V3zQAUFTBV9wo5lc4=
4933
github.com/strongo/slice v0.3.1/go.mod h1:B5ODKCkl0rp2oiG0UBqkN1cCOrSCU2cUuhqCM1sC8r4=
50-
github.com/strongo/strongoapp v0.31.3 h1:EXbURRmXtRoSlRHCbXEv06ljJV5LLWjNkfnSpCM0LuY=
51-
github.com/strongo/strongoapp v0.31.3/go.mod h1:4c58gk2eO/snVM9k9TPjDIzYoJ0tGCdsRdRys0xz3YQ=
52-
github.com/strongo/strongoapp v0.31.4 h1:3GWI0JY1SR1RGI24aUVpnYjkXNjOdF4OZjZe6mnJTLo=
53-
github.com/strongo/strongoapp v0.31.4/go.mod h1:noD1fUrDQg4d4fT4vEKTqAV78waaFSP9ndkGMDpAF9k=
54-
github.com/strongo/strongoapp v0.31.5 h1:Vsklvt+pX8gBI9OqwRsn0Zhjjq6cF5dxa+Wl07rv6J0=
55-
github.com/strongo/strongoapp v0.31.5/go.mod h1:Ul6kgjYKRYURmpiXfqvHutzKRKR10Z/8GfuIbmah4Q4=
5634
github.com/strongo/strongoapp v0.31.6 h1:uCGYnMkiBV8oknxnze1h6nHYMSlgCLl9jdAe9WXr04E=
5735
github.com/strongo/strongoapp v0.31.6/go.mod h1:EMbRAE2Cas2zYuewfwd/uqxqk7wN2O4lmzIt23Khusk=
5836
github.com/strongo/validation v0.0.7 h1:gs6YkwPsYtVsepQaQOB+ZF+T0Gu5+nk4ZMND8F85e+U=

telegram/bot_messages.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,3 +111,13 @@ func (SetBotCommands) BotMessageType() botsfw.BotMessageType {
111111
func (m SetBotCommands) BotEndpoint() string {
112112
return (tgbotapi.SetMyCommandsConfig)(m).TelegramMethod()
113113
}
114+
115+
type SendPhoto tgbotapi.PhotoConfig
116+
117+
func (SendPhoto) BotMessageType() botsfw.BotMessageType {
118+
return botsfw.BotMessageTypeSendPhoto
119+
}
120+
121+
func (m SendPhoto) BotEndpoint() string {
122+
return (tgbotapi.PhotoConfig)(m).TelegramMethod()
123+
}

telegram/json.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package telegram
2+
3+
import (
4+
"bytes"
5+
"encoding/json"
6+
)
7+
8+
func getJsonEncoder(buf *bytes.Buffer) *json.Encoder {
9+
encoder := json.NewEncoder(buf)
10+
encoder.SetEscapeHTML(false)
11+
encoder.SetIndent("", "\t")
12+
return encoder
13+
}
14+
15+
func encodeToJsonString(v any) (string, error) {
16+
var buf bytes.Buffer
17+
encoder := getJsonEncoder(&buf)
18+
if err := encoder.Encode(v); err != nil {
19+
return "", err
20+
}
21+
return buf.String(), nil
22+
}

telegram/tg_webhook_handler.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import (
99
"github.com/bots-go-framework/bots-fw-store/botsfwmodels"
1010
"github.com/bots-go-framework/bots-fw/botinput"
1111
"github.com/bots-go-framework/bots-fw/botsfw"
12-
"github.com/pquerna/ffjson/ffjson"
1312
"github.com/strongo/logus"
1413
"io"
1514
"net/http"
@@ -229,7 +228,7 @@ func (h tgWebhookHandler) GetBotContextAndInputs(ctx context.Context, r *http.Re
229228

230229
func (h tgWebhookHandler) unmarshalUpdate(_ context.Context, content []byte) (update *tgbotapi.Update, err error) {
231230
update = new(tgbotapi.Update)
232-
if err = ffjson.UnmarshalFast(content, update); err != nil {
231+
if err = json.Unmarshal(content, update); err != nil {
233232
return
234233
}
235234
return

telegram/webhook_input.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55
"github.com/bots-go-framework/bots-api-telegram/tgbotapi"
66
"github.com/bots-go-framework/bots-fw/botinput"
77
"github.com/bots-go-framework/bots-fw/botsfw"
8-
"github.com/pquerna/ffjson/ffjson"
98
"strconv"
109
"time"
1110
)
@@ -145,12 +144,19 @@ func NewTelegramWebhookInput(update *tgbotapi.Update, logRequest func()) (botinp
145144
switch {
146145

147146
case update.ChannelPost != nil:
148-
channelPost, _ := ffjson.MarshalFast(update.ChannelPost)
147+
channelPost, err := encodeToJsonString(update.ChannelPost)
148+
if err != nil {
149+
panic(err)
150+
}
149151
return nil, fmt.Errorf("the ChannelPost is not supported at the moment: [%s]: %w", channelPost, botsfw.ErrNotImplemented)
150152

151153
case update.EditedChannelPost != nil:
152-
editedChannelPost, _ := ffjson.MarshalFast(update.EditedChannelPost)
153-
return nil, fmt.Errorf("the EditedChannelPost is not supported at the moment: [%s]: %w", string(editedChannelPost), botsfw.ErrNotImplemented)
154+
155+
editedChannelPost, err := encodeToJsonString(update.EditedChannelPost)
156+
if err != nil {
157+
panic(err)
158+
}
159+
return nil, fmt.Errorf("the EditedChannelPost is not supported at the moment: [%s]: %w", editedChannelPost, botsfw.ErrNotImplemented)
154160
}
155161
default:
156162
return nil, fmt.Errorf("%w: %v", botsfw.ErrNotImplemented, inputType)

telegram/webhook_responder.go

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import (
1313
"github.com/bots-go-framework/bots-api-telegram/tgbotapi"
1414
"github.com/bots-go-framework/bots-fw/botinput"
1515
"github.com/bots-go-framework/bots-fw/botsfw"
16-
"github.com/pquerna/ffjson/ffjson"
1716
"github.com/strongo/logus"
1817
)
1918

@@ -90,9 +89,9 @@ func (r tgWebhookResponder) SendMessage(ctx context.Context, m botsfw.MessageFro
9089
parseMode := func() string {
9190
switch m.Format {
9291
case botsfw.MessageFormatHTML:
93-
return "html"
92+
return "HTML"
9493
case botsfw.MessageFormatMarkdown:
95-
return "markdown"
94+
return "MarkdownV2"
9695
case botsfw.MessageFormatText:
9796
return ""
9897
default:
@@ -151,6 +150,15 @@ func (r tgWebhookResponder) SendMessage(ctx context.Context, m botsfw.MessageFro
151150
case botsfw.BotMessageTypeAnswerPreCheckoutQuery:
152151
answerPreCheckoutQuery := m.BotMessage.(PreCheckoutQueryAnswer)
153152
sendable = (tgbotapi.AnswerPreCheckoutQueryConfig)(answerPreCheckoutQuery)
153+
case botsfw.BotMessageTypeSendPhoto:
154+
photoConfig := m.BotMessage.(SendPhoto)
155+
if photoConfig.ChatID == 0 {
156+
photoConfig.ChatID = tgUpdate.Chat().ID
157+
}
158+
if photoConfig.Caption != "" {
159+
photoConfig.ParseMode = parseMode()
160+
}
161+
sendable = (tgbotapi.PhotoConfig)(photoConfig)
154162
default:
155163
//var ok bool
156164
//sendable, ok = m.BotMessage.(tgbotapi.Sendable)
@@ -248,34 +256,24 @@ func (r tgWebhookResponder) SendMessage(ctx context.Context, m botsfw.MessageFro
248256
logus.Debugf(ctx, "No response to WebhookInputInlineQuery")
249257
case botinput.WebhookInputChosenInlineResult: // pass
250258
default:
251-
var mBytes []byte
252-
mBytes, err = ffjson.Marshal(m)
253-
if err != nil {
259+
var mJson string
260+
if mJson, err = encodeToJsonString(m); err != nil {
254261
logus.Errorf(ctx, "Failed to marshal MessageFromBot to JSON: %v", err)
262+
} else {
263+
inputTypeName := botinput.GetWebhookInputTypeIdNameString(inputType)
264+
logus.Debugf(ctx, "Not inline answer, Not inline, Not edit inline, Text is empty. r.whc.InputType(): %v\nMessageFromBot:\n%v", inputTypeName, mJson)
255265
}
256-
inputTypeName := botinput.GetWebhookInputTypeIdNameString(inputType)
257-
logus.Debugf(ctx, "Not inline answer, Not inline, Not edit inline, Text is empty. r.whc.InputType(): %v\nMessageFromBot:\n%v", inputTypeName, string(mBytes))
258-
ffjson.Pool(mBytes)
259266
}
260267
return
261268
}
262269

263-
var jsonStr []byte
264-
jsonStr, err = ffjson.Marshal(sendable)
265-
if err != nil {
266-
logus.Errorf(ctx, "Failed to marshal message config to json: %v\n\tJSON: %v\n\tsendable: %v", err, jsonStr, sendable)
267-
ffjson.Pool(jsonStr)
270+
var sendableStr string
271+
272+
if sendableStr, err = encodeToJsonString(sendable); err != nil {
273+
logus.Errorf(ctx, "Failed to marshal message config to json: %v\n\tsendable: %v", err, sendable)
268274
return resp, err
269275
}
270-
var indentedJSON bytes.Buffer
271-
var indentedJSONStr string
272-
if indentedErr := json.Indent(&indentedJSON, jsonStr, "", "\t"); indentedErr == nil {
273-
indentedJSONStr = indentedJSON.String()
274-
} else {
275-
indentedJSONStr = string(jsonStr)
276-
}
277-
ffjson.Pool(jsonStr)
278-
logus.Debugf(ctx, "Sending to Telegram, Text: %v\n------------------------\nAs JSON: %v", m.Text, indentedJSONStr)
276+
logus.Debugf(ctx, "Sending to Telegram, Text: %v\n------------------------\nAs JSON: %v", m.Text, sendableStr)
279277

280278
//if values, err := sendable.Values(); err != nil {
281279
// logus.Errorf(ctx, "Failed to marshal message config to url.Values: %v", err)
@@ -316,13 +314,15 @@ func (r tgWebhookResponder) sendOverHttps(ctx context.Context, chattable tgbotap
316314
} else if message.MessageID != 0 {
317315
logus.Debugf(ctx, "Telegram API: MessageID=%v", message.MessageID)
318316
} else {
319-
var messageJSON []byte
320-
if messageJSON, err = ffjson.Marshal(message); err != nil {
317+
var buf bytes.Buffer
318+
encoder := json.NewEncoder(&buf)
319+
encoder.SetIndent("", "\t")
320+
encoder.SetEscapeHTML(false)
321+
if err = encoder.Encode(chattable); err != nil {
321322
logus.Warningf(ctx, "Telegram API response as raw: %v", message)
322323
} else {
323-
logus.Debugf(ctx, "Telegram API response as JSON: %v", string(messageJSON))
324+
logus.Debugf(ctx, "Telegram API response as JSON: %v", string(buf.String()))
324325
}
325-
ffjson.Pool(messageJSON)
326326
}
327327
return
328328
}

0 commit comments

Comments
 (0)