57 lines
2 KiB
Go
57 lines
2 KiB
Go
package domain
|
|
|
|
import "errors"
|
|
|
|
const (
|
|
// MaxTranslationTexts matches the largest batch currently issued by TDesktop's
|
|
// whole-chat translation tracker.
|
|
MaxTranslationTexts = 20
|
|
// MaxTranslationInputBytes bounds one upstream request independently of the
|
|
// MTProto frame limit. TDesktop starts a new batch at the same 24 KiB boundary.
|
|
MaxTranslationInputBytes = 24 * 1024
|
|
// MaxTranslationOutputBytes permits language expansion while bounding an
|
|
// untrusted provider response before TL encoding.
|
|
MaxTranslationOutputBytes = 4 * MaxTranslationInputBytes
|
|
MaxTranslationToneRunes = 64
|
|
)
|
|
|
|
var (
|
|
ErrTranslationDisabled = errors.New("translation disabled")
|
|
ErrTranslationInputEmpty = errors.New("translation input empty")
|
|
ErrTranslationInputTooLong = errors.New("translation input too long")
|
|
ErrTranslationLanguageInvalid = errors.New("translation language invalid")
|
|
ErrTranslationMessageInvalid = errors.New("translation message invalid")
|
|
ErrTranslationPeerInvalid = errors.New("translation peer invalid")
|
|
ErrTranslationRateLimited = errors.New("translation rate limited")
|
|
ErrTranslationProviderUnavailable = errors.New("translation provider unavailable")
|
|
ErrTranslationTimeout = errors.New("translation timeout")
|
|
)
|
|
|
|
// TranslationText is protocol-neutral text accepted or returned by the
|
|
// translation service. Providers may omit entities when they cannot preserve
|
|
// offsets safely; they must never return stale source offsets for changed text.
|
|
type TranslationText struct {
|
|
Text string
|
|
Entities []MessageEntity
|
|
}
|
|
|
|
func (t TranslationText) Clone() TranslationText {
|
|
out := t
|
|
out.Entities = append([]MessageEntity(nil), t.Entities...)
|
|
return out
|
|
}
|
|
|
|
type TranslationRequest struct {
|
|
UserID int64
|
|
// Peer+IDs selects stored messages. Texts selects caller-supplied text.
|
|
// Exactly one mode must be used.
|
|
Peer Peer
|
|
IDs []int
|
|
Texts []TranslationText
|
|
ToLang string
|
|
Tone string
|
|
}
|
|
|
|
type TranslationResult struct {
|
|
Texts []TranslationText
|
|
}
|