mirror of
https://github.com/lukaszraczylo/go-telegram.git
synced 2026-06-05 22:43:59 +00:00
e4614d800f
Telegram's optional int/bool/float fields are pointers so callers can explicitly send false or 0 to override a chat default — distinct from 'absent', which uses the chat default. The pointer construction has been ergonomically painful: photoLimit := int64(5) Limit: &photoLimit api.Ptr[T any](v T) *T collapses that to a single line: Limit: api.Ptr[int64](5) DisableNotification: api.Ptr(true) Pointers stay because the explicit-zero distinction matters for fields like DisableNotification, ProtectContent, and getUpdates.Offset where sending 0 / false explicitly is semantically different from omitting the field.
17 lines
477 B
Go
17 lines
477 B
Go
package api
|
|
|
|
// Ptr returns a pointer to v. Useful for optional scalar fields where
|
|
// the wire format must distinguish absent (nil) from an explicit zero
|
|
// value (e.g. DisableNotification: api.Ptr(false) to override the
|
|
// chat default).
|
|
//
|
|
// For untyped literals, supply the type parameter explicitly:
|
|
//
|
|
// Limit: api.Ptr[int64](5)
|
|
//
|
|
// For already-typed values, type inference handles it:
|
|
//
|
|
// var n int64 = 5
|
|
// Limit: api.Ptr(n)
|
|
func Ptr[T any](v T) *T { return &v }
|