package main

import (
	"encoding/json"
	"fmt"
)

var raw_data = `{
	"FullName":"Yusuf Turhan Papurcu",
	"Email":"yusufturhanp@gmail.com",
	"Items":"cookie",
	"CreditCardInfo":":)",
	"CreatedAt":"19/03/22"
}`

func main() {
	var gotData emailCover
	err := json.Unmarshal([]byte(raw_data), &gotData)
	fmt.Printf("%v\nerr:%s", gotData, err)

	sendData := emailCover{
		FullName:       "Yusuf Turhan Papurcu",
		Email:          "yusufturhanp@gmail.com",
		Items:          "cookie",
		CreditCardInfo: ":)",
		CreatedAt:      "19/03/22",
	}

	data_as_byte, err := json.Marshal(sendData)
	fmt.Printf("%s\nerr:%s", string(data_as_byte), err)
}

type exampleStruct struct {
	FullName       string
	Email          string
	Items          string
	CreditCardInfo string
	CreatedAt      string
}

func getDefaultsexamplestruct() exampleStruct {
	return exampleStruct{
		FullName:       "N/A",
		Email:          "N/A",
		Items:          "N/A",
		CreditCardInfo: "N/A",
		CreatedAt:      "N/A",
	}
}

type emailCover exampleStruct

func (c *emailCover) UnmarshalJSON(data []byte) error {
	var a exampleStruct
	if err := json.Unmarshal(data, &a); err != nil {
		return err
	}

	c.Email = a.Email
	c.FullName = a.FullName
	return nil
}

func (c emailCover) MarshalJSON() ([]byte, error) {
	a := getDefaultsexamplestruct()

	a.Email = c.Email
	a.FullName = c.FullName
	return json.Marshal(a)
}