layout: add shorter data alias for callback_data

pull/425/head
Demian 3 years ago
parent 55ffac1c33
commit 965bc10466

@ -22,7 +22,16 @@ buttons:
stop:
unique: stop
text: Stop
callback_data: '{{.}}'
data: '{{.}}'
# Callback data
pay:
unique: pay
text: Pay
data:
- '{{.UserID}}'
- '{{.Amount}}'
- '{{.Currency}}'
markups:
reply_shortened:

@ -45,4 +45,18 @@ func TestLayout(t *testing.T) {
assert.Equal(t, &tele.ReplyMarkup{
InlineKeyboard: [][]tele.InlineButton{{{Unique: "stop", Text: "Stop", Data: "1"}}},
}, lt.MarkupLocale("en", "inline", 1))
assert.Equal(t, &tele.Btn{
Unique: "pay",
Text: "Pay",
Data: "1|100.00|USD",
}, lt.ButtonLocale("en", "pay", struct {
UserID int
Amount string
Currency string
}{
UserID: 1,
Amount: "100.00",
Currency: "USD",
}))
}

@ -78,12 +78,29 @@ func (lt *Layout) UnmarshalYAML(data []byte) error {
return err
}
var btn Button
var btn struct {
Button `yaml:",inline"`
Data interface{} `json:"data"`
}
if err := yaml.Unmarshal(data, &btn); err != nil {
return err
}
lt.buttons[k] = btn
if btn.Data != nil {
if a, ok := btn.Data.([]interface{}); ok {
s := make([]string, len(a))
for i, v := range a {
s[i] = fmt.Sprint(v)
}
btn.Button.Data = strings.Join(s, "|")
} else if s, ok := btn.Data.(string); ok {
btn.Button.Data = s
} else {
return fmt.Errorf("telebot/layout: invalid callback_data for %s button", k)
}
}
lt.buttons[k] = btn.Button
}
lt.markups = make(map[string]Markup, len(aux.Markups))

Loading…
Cancel
Save