// 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"
)

// DataflowKafkaInfo dataflow kafka info
//
// swagger:model dataflowKafkaInfo
type DataflowKafkaInfo struct {

	// authentication
	Authentication *DataflowAuthentication `json:"authentication,omitempty"`

	// broker
	Broker *DataflowBroker `json:"broker,omitempty"`

	// data format
	DataFormat *DataflowDataFormat `json:"data_format,omitempty"`

	// table config
	TableConfig *DataflowTableConfig `json:"table_config,omitempty"`

	// topic partition config
	TopicPartitionConfig *DataflowTopicPartitionConfig `json:"topic_partition_config,omitempty"`

	StartPosition *DataflowStartPosition `json:"start_position,omitempty"`
}

// Validate validates this dataflow kafka info
func (m *DataflowKafkaInfo) Validate(formats strfmt.Registry) error {
	var res []error

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

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

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

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

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

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

func (m *DataflowKafkaInfo) validateAuthentication(formats strfmt.Registry) error {
	if swag.IsZero(m.Authentication) { // not required
		return nil
	}

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

	return nil
}

func (m *DataflowKafkaInfo) validateBroker(formats strfmt.Registry) error {
	if swag.IsZero(m.Broker) { // not required
		return nil
	}

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

	return nil
}

func (m *DataflowKafkaInfo) validateDataFormat(formats strfmt.Registry) error {
	if swag.IsZero(m.DataFormat) { // not required
		return nil
	}

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

	return nil
}

func (m *DataflowKafkaInfo) validateTableConfig(formats strfmt.Registry) error {
	if swag.IsZero(m.TableConfig) { // not required
		return nil
	}

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

	return nil
}

func (m *DataflowKafkaInfo) validateTopicPartitionConfig(formats strfmt.Registry) error {
	if swag.IsZero(m.TopicPartitionConfig) { // not required
		return nil
	}

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

	return nil
}

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

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

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

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

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

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

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

func (m *DataflowKafkaInfo) contextValidateAuthentication(ctx context.Context, formats strfmt.Registry) error {

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

	return nil
}

func (m *DataflowKafkaInfo) contextValidateBroker(ctx context.Context, formats strfmt.Registry) error {

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

	return nil
}

func (m *DataflowKafkaInfo) contextValidateDataFormat(ctx context.Context, formats strfmt.Registry) error {

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

	return nil
}

func (m *DataflowKafkaInfo) contextValidateTableConfig(ctx context.Context, formats strfmt.Registry) error {

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

	return nil
}

func (m *DataflowKafkaInfo) contextValidateTopicPartitionConfig(ctx context.Context, formats strfmt.Registry) error {

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

	return nil
}

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

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

func NewDataFlowKafkaInfo(authentication *DataflowAuthentication, broker *DataflowBroker, dataFormat *DataflowDataFormat, tableConfig *DataflowTableConfig, topicPartitionConfig *DataflowTopicPartitionConfig) DataflowKafkaInfo {
	return DataflowKafkaInfo{authentication, broker, dataFormat, tableConfig, topicPartitionConfig, nil}
}
