crypto: add full support for json.RawMessage in EncryptMegolmEvent
Some checks are pending
Go / Lint (latest) (push) Waiting to run
Go / Build (old, libolm) (push) Waiting to run
Go / Build (latest, libolm) (push) Waiting to run
Go / Build (old, goolm) (push) Waiting to run
Go / Build (latest, goolm) (push) Waiting to run

This commit is contained in:
Tulir Asokan 2024-10-18 20:49:05 +03:00
commit 3277c529a2

View file

@ -15,6 +15,8 @@ import (
"fmt"
"github.com/rs/zerolog"
"github.com/tidwall/gjson"
"go.mau.fi/util/exgjson"
"go.mau.fi/util/exzerolog"
"maunium.net/go/mautrix"
@ -27,7 +29,24 @@ var (
NoGroupSession = errors.New("no group session created")
)
func getRelatesTo(content interface{}) *event.RelatesTo {
func getRawJSON[T any](content json.RawMessage, path ...string) *T {
value := gjson.GetBytes(content, exgjson.Path(path...))
if !value.IsObject() {
return nil
}
var result T
err := json.Unmarshal([]byte(value.Raw), &result)
if err != nil {
return nil
}
return &result
}
func getRelatesTo(content any) *event.RelatesTo {
contentJSON, ok := content.(json.RawMessage)
if ok {
return getRawJSON[event.RelatesTo](contentJSON, "m.relates_to")
}
contentStruct, ok := content.(*event.Content)
if ok {
content = contentStruct.Parsed
@ -39,7 +58,11 @@ func getRelatesTo(content interface{}) *event.RelatesTo {
return nil
}
func getMentions(content interface{}) *event.Mentions {
func getMentions(content any) *event.Mentions {
contentJSON, ok := content.(json.RawMessage)
if ok {
return getRawJSON[event.Mentions](contentJSON, "m.mentions")
}
contentStruct, ok := content.(*event.Content)
if ok {
content = contentStruct.Parsed