Skip to content

Commit

Permalink
DEV-73349 try to serialize additional fields (#333)
Browse files Browse the repository at this point in the history
* DEV-73349 try to serialize additional fields

* DEV-73349 try to serialize additional fields test
  • Loading branch information
TobiasNaethLynqtech authored Nov 18, 2024
1 parent 7250dd8 commit ad2c939
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 2 deletions.
26 changes: 24 additions & 2 deletions bo/marktteilnehmer.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
package bo

import (
"encoding/json"
"github.com/hochfrequenz/go-bo4e/enum/marktrolle"
"github.com/hochfrequenz/go-bo4e/enum/rollencodetyp"
"github.com/hochfrequenz/go-bo4e/internal/jsonfieldnames"
"github.com/hochfrequenz/go-bo4e/internal/unmappeddatamarshaller"
)

// Marktteilnehmer models participants of the German energy market
Expand All @@ -15,6 +18,25 @@ type Marktteilnehmer struct {
Ansprechpartner *Ansprechpartner `json:"ansprechpartner,omitempty" validate:"omitempty"` // Ansprechpartner ist ein Kontakt zur bilateralen Klärung
}

func (_ Marktteilnehmer) GetDefaultJsonTags() []string {
panic("todo: implement me") // this is needed for (un)marshaling of non-default/unknown json fields
func (marktteilnehmer Marktteilnehmer) GetDefaultJsonTags() []string {
// We know we pass a struct here so ignore the error.
fields, _ := jsonfieldnames.Extract(marktteilnehmer)
return fields
}

func (marktteilnehmer *Marktteilnehmer) UnmarshalJSON(bytes []byte) (err error) {
return unmappeddatamarshaller.UnmarshallWithUnmappedData(marktteilnehmer, &marktteilnehmer.ExtensionData, bytes)
}

// martktteilnehmerForMarshal is a struct similar to the original Marktteilnehmer but uses a different Marshaller so that we don't run into an endless recursion
type marktteilnehmerForMarshal Marktteilnehmer

//nolint:dupl // This can only be simplified if we use generics. anything else seems overly complicated but maybe it's just me
func (marktteilnehmer Marktteilnehmer) MarshalJSON() (bytes []byte, err error) {
s := marktteilnehmerForMarshal(marktteilnehmer)
byteArr, err := json.Marshal(s)
if err != nil {
return
}
return unmappeddatamarshaller.HandleUnmappedDataPropertyMarshalling(byteArr)
}
26 changes: 26 additions & 0 deletions market_communication/boney_comb_marktteilnehmer_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package market_communication_test

import (
"encoding/json"
"testing"

"github.com/corbym/gocrest/is"
Expand Down Expand Up @@ -207,3 +208,28 @@ func Test_SetEmpfaenger(t *testing.T) {
then.AssertThat(t, *bc.GetEmpfaengerCode(), is.EqualTo("9903100000006"))
then.AssertThat(t, bc.GetEmpfaenger(), is.EqualTo(&mt))
}

func Test_ExtensionData(t *testing.T) {
mt := bo.Marktteilnehmer{
Rollencodenummer: "9903100000006",
Geschaeftspartner: bo.Geschaeftspartner{
Geschaeftsobjekt: bo.Geschaeftsobjekt{
BoTyp: botyp.MARKTTEILNEHMER,
VersionStruktur: "1.1",
},
},
}
mt.ExtensionData = map[string]any{}
mt.ExtensionData["sparte"] = "STROM"
bc := market_communication.BOneyComb{}
bc.SetEmpfaenger(mt, true)
bcJson, _ := json.Marshal(bc)

unmarshalBc := market_communication.BOneyComb{}
err := json.Unmarshal(bcJson, &unmarshalBc)
if err != nil {
t.Errorf("Error occured while unmarshalling: %v", err)
}
empfaenger := unmarshalBc.GetEmpfaenger()
then.AssertThat(t, empfaenger.ExtensionData["sparte"].(string), is.EqualTo("STROM"))
}

0 comments on commit ad2c939

Please sign in to comment.