Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for MarshalJSON #241

Open
jamietanna opened this issue Jun 6, 2024 · 4 comments
Open

Add support for MarshalJSON #241

jamietanna opened this issue Jun 6, 2024 · 4 comments

Comments

@jamietanna
Copy link
Contributor

I couldn't seem to see anything around why there may not be a MarshalJSON method as well as an UnmarshalJSON, is that intended?

@jamietanna
Copy link
Contributor Author

jamietanna commented Jun 6, 2024

Actually maybe this isn't needed, and I may have thought it was needed due to #242

This may only be needed alongside #242 where a custom MarshalJSON is needed?

@jamietanna
Copy link
Contributor Author

This could alternatively be a new Validator that handles the generation of

Example (Apache-2.0 licensed) code that's output from oapi-codegen for the same purpose:

func (a Pong) MarshalJSON() ([]byte, error) {
	var err error
	object := make(map[string]json.RawMessage)

	object["ping"], err = json.Marshal(a.Ping)
	if err != nil {
		return nil, fmt.Errorf("error marshaling 'ping': %w", err)
	}

	for fieldName, field := range a.AdditionalProperties {
		object[fieldName], err = json.Marshal(field)
		if err != nil {
			return nil, fmt.Errorf("error marshaling '%s': %w", fieldName, err)
		}
	}
	return json.Marshal(object)
}

For the following (OpenAPI):

    Pong:
      type: object
      required:
        - ping
      properties:
        ping:
          type: string
          example: pong
      additionalProperties:
        type: string

@jamietanna
Copy link
Contributor Author

Alternatively could we conditionally generate a MarshalJSON method if we detect we have AdditionalProperties?

@jamietanna
Copy link
Contributor Author

(This may also need tweaking for the unmarshalJSON implementation)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant