// 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 (
	strfmt "github.com/go-openapi/strfmt"

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

// NetworkInterface Defines a network interface.
// swagger:model NetworkInterface
type NetworkInterface struct {

	// If this field is set, the device model will reply to HTTP GET requests sent to the MMDS address via this interface. In this case, both ARP requests for 169.254.169.254 and TCP segments heading to the same address are intercepted by the device model, and do not reach the associated TAP device.
	AllowMmdsRequests bool `json:"allow_mmds_requests,omitempty"`

	// guest mac
	GuestMac string `json:"guest_mac,omitempty"`

	// Host level path for the guest network interface
	// Required: true
	HostDevName *string `json:"host_dev_name"`

	// iface id
	// Required: true
	IfaceID *string `json:"iface_id"`

	// rx rate limiter
	RxRateLimiter *RateLimiter `json:"rx_rate_limiter,omitempty"`

	// tx rate limiter
	TxRateLimiter *RateLimiter `json:"tx_rate_limiter,omitempty"`
}

// Validate validates this network interface
func (m *NetworkInterface) Validate(formats strfmt.Registry) error {
	var res []error

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

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

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

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

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

func (m *NetworkInterface) validateHostDevName(formats strfmt.Registry) error {

	if err := validate.Required("host_dev_name", "body", m.HostDevName); err != nil {
		return err
	}

	return nil
}

func (m *NetworkInterface) validateIfaceID(formats strfmt.Registry) error {

	if err := validate.Required("iface_id", "body", m.IfaceID); err != nil {
		return err
	}

	return nil
}

func (m *NetworkInterface) validateRxRateLimiter(formats strfmt.Registry) error {

	if swag.IsZero(m.RxRateLimiter) { // not required
		return nil
	}

	if m.RxRateLimiter != nil {
		if err := m.RxRateLimiter.Validate(formats); err != nil {
			if ve, ok := err.(*errors.Validation); ok {
				return ve.ValidateName("rx_rate_limiter")
			}
			return err
		}
	}

	return nil
}

func (m *NetworkInterface) validateTxRateLimiter(formats strfmt.Registry) error {

	if swag.IsZero(m.TxRateLimiter) { // not required
		return nil
	}

	if m.TxRateLimiter != nil {
		if err := m.TxRateLimiter.Validate(formats); err != nil {
			if ve, ok := err.(*errors.Validation); ok {
				return ve.ValidateName("tx_rate_limiter")
			}
			return err
		}
	}

	return nil
}

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

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