package binder

import (
	"fmt"

	"github.com/gofiber/utils/v2"
)

// XMLBinding is the XML binder for XML request body.
type XMLBinding struct {
	XMLDecoder utils.XMLUnmarshal
}

// Name returns the binding name.
func (*XMLBinding) Name() string {
	return "xml"
}

// Bind parses the request body as XML and returns the result.
func (b *XMLBinding) Bind(body []byte, out any) error {
	if err := b.XMLDecoder(body, out); err != nil {
		return fmt.Errorf("failed to unmarshal xml: %w", err)
	}

	return nil
}

// Reset resets the XMLBinding binder.
func (b *XMLBinding) Reset() {
	b.XMLDecoder = nil
}