in functions/functionsv2/ocr/app/translate.go [38:97]
func TranslateText(ctx context.Context, cloudevent event.Event) error {
var event MessagePublishedData
if err := setup(ctx); err != nil {
return fmt.Errorf("setup: %w", err)
}
if err := cloudevent.DataAs(&event); err != nil {
return fmt.Errorf("Failed to parse CloudEvent data: %w", err)
}
if event.Message.Data == nil {
log.Printf("event: %s", event)
return fmt.Errorf("empty data")
}
var message ocrMessage
if err := json.Unmarshal(event.Message.Data, &message); err != nil {
return fmt.Errorf("json.Unmarshal: %w", err)
}
log.Printf("Translating text into %s.", message.Lang.String())
opts := translate.Options{
Source: message.SrcLang,
}
translateResponse, err := translateClient.Translate(ctx, []string{message.Text}, message.Lang, &opts)
if err != nil {
return fmt.Errorf("Translate: %w", err)
}
if len(translateResponse) == 0 {
return fmt.Errorf("Empty Translate response")
}
translatedText := translateResponse[0]
messageData, err := json.Marshal(ocrMessage{
Text: translatedText.Text,
FileName: message.FileName,
Lang: message.Lang,
SrcLang: message.SrcLang,
})
if err != nil {
return fmt.Errorf("json.Marshal: %w", err)
}
topic := pubsubClient.Topic(resultTopic)
ok, err := topic.Exists(ctx)
if err != nil {
return fmt.Errorf("Exists: %w", err)
}
if !ok {
topic, err = pubsubClient.CreateTopic(ctx, resultTopic)
if err != nil {
return fmt.Errorf("CreateTopic: %w", err)
}
}
msg := &pubsub.Message{
Data: messageData,
}
if _, err = topic.Publish(ctx, msg).Get(ctx); err != nil {
return fmt.Errorf("Get: %w", err)
}
log.Printf("Sent translation: %q", translatedText.Text)
return nil
}