141 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Go
		
	
	
			
		
		
	
	
			141 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Go
		
	
	
| package ent
 | ||
| 
 | ||
| import (
 | ||
| 	"encoding/json"
 | ||
| 
 | ||
| 	"sourcecode.social/reiver/go-erorr"
 | ||
| 	"github.com/reiver/go-opt"
 | ||
| 	"sourcecode.social/reiver/go-nul"
 | ||
| )
 | ||
| 
 | ||
| var _ json.Marshaler = Application{}
 | ||
| 
 | ||
| const (
 | ||
| 	errCannotMashalApplicationAsJSONNoName     = erorr.Error("cannot marshal ent.Application to JSON — no ‘name’ set")
 | ||
| 	errCannotMashalApplicationAsJSONNoVapidKey = erorr.Error("cannot marshal ent.Application to JSON — no ‘vapid_key’ set")
 | ||
| )
 | ||
| 
 | ||
| // Appication represents a Mastodon API "Appication".
 | ||
| //
 | ||
| // See:
 | ||
| // https://docs.joinmastodon.org/entities/Application/
 | ||
| type Application struct {
 | ||
| 	Name         opt.Optional[string] `json:"name"`
 | ||
| 	WebSite      nul.Nullable[string] `json:"website"`       // optional — field has JSON null value in JSON if not set
 | ||
| 	VapidKey     opt.Optional[string] `json:"vapid_key"`
 | ||
| 	ClientID     opt.Optional[string] `json:"client_id"`     // optional — field not included in JSON if not set
 | ||
| 	ClientSecret opt.Optional[string] `json:"client_secret"` // optional — field not included in JSON if not set
 | ||
| }
 | ||
| 
 | ||
| func (receiver Application) MarshalJSON() ([]byte, error) {
 | ||
| 
 | ||
| 	var array [512]byte
 | ||
| 	var buffer []byte = array[0:0]
 | ||
| 
 | ||
| 	buffer = append(buffer, "{"...)
 | ||
| 
 | ||
| 	{
 | ||
| 		val, found := receiver.Name.Get()
 | ||
| 		if !found {
 | ||
| 			return nil, errCannotMashalApplicationAsJSONNoName
 | ||
| 		}
 | ||
| 
 | ||
| 		buffer = append(buffer, `"name":`...)
 | ||
| 
 | ||
| 		{
 | ||
| 			marshaled, err := json.Marshal(val)
 | ||
| 			if nil != err {
 | ||
| 				return nil, erorr.Errorf("ent: could not marshal ent.Application.Name as JSON: %w", err)
 | ||
| 			}
 | ||
| 
 | ||
| 			buffer = append(buffer, marshaled...)
 | ||
| 		}
 | ||
| 	}
 | ||
| 
 | ||
| 	{
 | ||
| 		buffer = append(buffer, `,"website":`...)
 | ||
| 
 | ||
| 		switch receiver.WebSite {
 | ||
| 		case nul.Nothing[string](), nul.Null[string]():
 | ||
| 			buffer = append(buffer, `null`...)
 | ||
| 		default:
 | ||
| 			website, found := receiver.WebSite.Get()
 | ||
| 			if !found {
 | ||
| 				return nil, erorr.Error("ent: could not marshal ent.Application.WebSite as JSON: internal error")
 | ||
| 			}
 | ||
| 
 | ||
| 			marshaled, err := json.Marshal(website)
 | ||
| 			if nil != err {
 | ||
| 				return nil, erorr.Errorf("ent: could not marshal ent.Application.WebSite as JSON: %w", err)
 | ||
| 			}
 | ||
| 
 | ||
| 			buffer = append(buffer, marshaled...)
 | ||
| 		}
 | ||
| 	}
 | ||
| 
 | ||
| 	{
 | ||
| 		val, found := receiver.VapidKey.Get()
 | ||
| 		if !found {
 | ||
| 			return nil, errCannotMashalApplicationAsJSONNoVapidKey
 | ||
| 		}
 | ||
| 
 | ||
| 		buffer = append(buffer, `,"vapid_key":`...)
 | ||
| 
 | ||
| 		{
 | ||
| 			marshaled, err := json.Marshal(val)
 | ||
| 			if nil != err {
 | ||
| 				return nil, erorr.Errorf("ent: could not marshal ent.Application.VapidKey as JSON: %w", err)
 | ||
| 			}
 | ||
| 
 | ||
| 			buffer = append(buffer, marshaled...)
 | ||
| 		}
 | ||
| 	}
 | ||
| 
 | ||
| 	{
 | ||
| 		switch receiver.ClientID {
 | ||
| 		case opt.Nothing[string]():
 | ||
| 			// Nothing here.
 | ||
| 		default:
 | ||
| 			clientID, found := receiver.ClientID.Get()
 | ||
| 			if !found {
 | ||
| 				return nil, erorr.Error("ent: could not marshal ent.Application.ClientID as JSON: internal error")
 | ||
| 			}
 | ||
| 
 | ||
| 			buffer = append(buffer, `,"client_id":`...)
 | ||
| 
 | ||
| 			marshaled, err := json.Marshal(clientID)
 | ||
| 			if nil != err {
 | ||
| 				return nil, erorr.Errorf("ent: could not marshal ent.Application.ClientID as JSON: %w", err)
 | ||
| 			}
 | ||
| 
 | ||
| 			buffer = append(buffer, marshaled...)
 | ||
| 		}
 | ||
| 	}
 | ||
| 
 | ||
| 	{
 | ||
| 		switch receiver.ClientSecret {
 | ||
| 		case opt.Nothing[string]():
 | ||
| 			// Nothing here.
 | ||
| 		default:
 | ||
| 			clientSecret, found := receiver.ClientSecret.Get()
 | ||
| 			if !found {
 | ||
| 				return nil, erorr.Error("ent: could not marshal ent.Application.ClientSecret as JSON: internal error")
 | ||
| 			}
 | ||
| 
 | ||
| 			buffer = append(buffer, `,"client_secret":`...)
 | ||
| 
 | ||
| 			marshaled, err := json.Marshal(clientSecret)
 | ||
| 			if nil != err {
 | ||
| 				return nil, erorr.Errorf("ent: could not marshal ent.Application.ClientSecret as JSON: %w", err)
 | ||
| 			}
 | ||
| 
 | ||
| 			buffer = append(buffer, marshaled...)
 | ||
| 		}
 | ||
| 	}
 | ||
| 
 | ||
| 	buffer = append(buffer, "}"...)
 | ||
| 
 | ||
| 
 | ||
| 	return buffer, nil
 | ||
| }
 |