// Code generated by go-swagger; DO NOT EDIT.

package models

// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command

import (
	"context"

	"github.com/go-openapi/errors"
	"github.com/go-openapi/strfmt"
	"github.com/go-openapi/swag"
)

// DataflowDataFormat dataflow data format
//
// swagger:model dataflowDataFormat
type DataflowDataFormat struct {

	// bigint unsigned handling mode
	BigintUnsignedHandlingMode *DataflowBigintUnsignedHandlingMode `json:"bigint_unsigned_handling_mode,omitempty"`

	// decimal handling mode
	DecimalHandlingMode *DataflowDecimalHandlingMode `json:"decimal_handling_mode,omitempty"`

	// enable tidb extension
	EnableTidbExtension bool `json:"enable_tidb_extension,omitempty"`

	// protocol
	Protocol *DataflowProtocol `json:"protocol,omitempty"`

	// schema registry
	SchemaRegistry *DataflowSchemaRegistry `json:"schema_registry,omitempty"`
}

// Validate validates this dataflow data format
func (m *DataflowDataFormat) Validate(formats strfmt.Registry) error {
	var res []error

	if err := m.validateBigintUnsignedHandlingMode(formats); err != nil {
		res = append(res, err)
	}

	if err := m.validateDecimalHandlingMode(formats); err != nil {
		res = append(res, err)
	}

	if err := m.validateProtocol(formats); err != nil {
		res = append(res, err)
	}

	if err := m.validateSchemaRegistry(formats); err != nil {
		res = append(res, err)
	}

	if len(res) > 0 {
		return errors.CompositeValidationError(res...)
	}
	return nil
}

func (m *DataflowDataFormat) validateBigintUnsignedHandlingMode(formats strfmt.Registry) error {
	if swag.IsZero(m.BigintUnsignedHandlingMode) { // not required
		return nil
	}

	if m.BigintUnsignedHandlingMode != nil {
		if err := m.BigintUnsignedHandlingMode.Validate(formats); err != nil {
			if ve, ok := err.(*errors.Validation); ok {
				return ve.ValidateName("bigint_unsigned_handling_mode")
			} else if ce, ok := err.(*errors.CompositeError); ok {
				return ce.ValidateName("bigint_unsigned_handling_mode")
			}
			return err
		}
	}

	return nil
}

func (m *DataflowDataFormat) validateDecimalHandlingMode(formats strfmt.Registry) error {
	if swag.IsZero(m.DecimalHandlingMode) { // not required
		return nil
	}

	if m.DecimalHandlingMode != nil {
		if err := m.DecimalHandlingMode.Validate(formats); err != nil {
			if ve, ok := err.(*errors.Validation); ok {
				return ve.ValidateName("decimal_handling_mode")
			} else if ce, ok := err.(*errors.CompositeError); ok {
				return ce.ValidateName("decimal_handling_mode")
			}
			return err
		}
	}

	return nil
}

func (m *DataflowDataFormat) validateProtocol(formats strfmt.Registry) error {
	if swag.IsZero(m.Protocol) { // not required
		return nil
	}

	if m.Protocol != nil {
		if err := m.Protocol.Validate(formats); err != nil {
			if ve, ok := err.(*errors.Validation); ok {
				return ve.ValidateName("protocol")
			} else if ce, ok := err.(*errors.CompositeError); ok {
				return ce.ValidateName("protocol")
			}
			return err
		}
	}

	return nil
}

func (m *DataflowDataFormat) validateSchemaRegistry(formats strfmt.Registry) error {
	if swag.IsZero(m.SchemaRegistry) { // not required
		return nil
	}

	if m.SchemaRegistry != nil {
		if err := m.SchemaRegistry.Validate(formats); err != nil {
			if ve, ok := err.(*errors.Validation); ok {
				return ve.ValidateName("schema_registry")
			} else if ce, ok := err.(*errors.CompositeError); ok {
				return ce.ValidateName("schema_registry")
			}
			return err
		}
	}

	return nil
}

// ContextValidate validate this dataflow data format based on the context it is used
func (m *DataflowDataFormat) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
	var res []error

	if err := m.contextValidateBigintUnsignedHandlingMode(ctx, formats); err != nil {
		res = append(res, err)
	}

	if err := m.contextValidateDecimalHandlingMode(ctx, formats); err != nil {
		res = append(res, err)
	}

	if err := m.contextValidateProtocol(ctx, formats); err != nil {
		res = append(res, err)
	}

	if err := m.contextValidateSchemaRegistry(ctx, formats); err != nil {
		res = append(res, err)
	}

	if len(res) > 0 {
		return errors.CompositeValidationError(res...)
	}
	return nil
}

func (m *DataflowDataFormat) contextValidateBigintUnsignedHandlingMode(ctx context.Context, formats strfmt.Registry) error {

	if m.BigintUnsignedHandlingMode != nil {
		if err := m.BigintUnsignedHandlingMode.ContextValidate(ctx, formats); err != nil {
			if ve, ok := err.(*errors.Validation); ok {
				return ve.ValidateName("bigint_unsigned_handling_mode")
			} else if ce, ok := err.(*errors.CompositeError); ok {
				return ce.ValidateName("bigint_unsigned_handling_mode")
			}
			return err
		}
	}

	return nil
}

func (m *DataflowDataFormat) contextValidateDecimalHandlingMode(ctx context.Context, formats strfmt.Registry) error {

	if m.DecimalHandlingMode != nil {
		if err := m.DecimalHandlingMode.ContextValidate(ctx, formats); err != nil {
			if ve, ok := err.(*errors.Validation); ok {
				return ve.ValidateName("decimal_handling_mode")
			} else if ce, ok := err.(*errors.CompositeError); ok {
				return ce.ValidateName("decimal_handling_mode")
			}
			return err
		}
	}

	return nil
}

func (m *DataflowDataFormat) contextValidateProtocol(ctx context.Context, formats strfmt.Registry) error {

	if m.Protocol != nil {
		if err := m.Protocol.ContextValidate(ctx, formats); err != nil {
			if ve, ok := err.(*errors.Validation); ok {
				return ve.ValidateName("protocol")
			} else if ce, ok := err.(*errors.CompositeError); ok {
				return ce.ValidateName("protocol")
			}
			return err
		}
	}

	return nil
}

func (m *DataflowDataFormat) contextValidateSchemaRegistry(ctx context.Context, formats strfmt.Registry) error {

	if m.SchemaRegistry != nil {
		if err := m.SchemaRegistry.ContextValidate(ctx, formats); err != nil {
			if ve, ok := err.(*errors.Validation); ok {
				return ve.ValidateName("schema_registry")
			} else if ce, ok := err.(*errors.CompositeError); ok {
				return ce.ValidateName("schema_registry")
			}
			return err
		}
	}

	return nil
}

// MarshalBinary interface implementation
func (m *DataflowDataFormat) MarshalBinary() ([]byte, error) {
	if m == nil {
		return nil, nil
	}
	return swag.WriteJSON(m)
}

// UnmarshalBinary interface implementation
func (m *DataflowDataFormat) UnmarshalBinary(b []byte) error {
	var res DataflowDataFormat
	if err := swag.ReadJSON(b, &res); err != nil {
		return err
	}
	*m = res
	return nil
}

func NewDataFlowDataFormat(bigintUnsignedHandlingMode *DataflowBigintUnsignedHandlingMode, decimalHandlingMode *DataflowDecimalHandlingMode, enableTidbExtension bool, protocol *DataflowProtocol, schemaRegistry *DataflowSchemaRegistry) DataflowDataFormat {
	return DataflowDataFormat{bigintUnsignedHandlingMode, decimalHandlingMode, enableTidbExtension, protocol, schemaRegistry}
}
