/*
 * Subset of Influx API covered by Influx CLI
 *
 * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
 *
 * API version: 2.0.0
 */

// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.

package api

import (
	"encoding/json"
)

// Replication struct for Replication
type Replication struct {
	Id                       string  `json:"id" yaml:"id"`
	Name                     string  `json:"name" yaml:"name"`
	Description              *string `json:"description,omitempty" yaml:"description,omitempty"`
	OrgID                    string  `json:"orgID" yaml:"orgID"`
	RemoteID                 string  `json:"remoteID" yaml:"remoteID"`
	LocalBucketID            string  `json:"localBucketID" yaml:"localBucketID"`
	RemoteBucketID           *string `json:"remoteBucketID,omitempty" yaml:"remoteBucketID,omitempty"`
	RemoteBucketName         *string `json:"remoteBucketName,omitempty" yaml:"remoteBucketName,omitempty"`
	MaxQueueSizeBytes        int64   `json:"maxQueueSizeBytes" yaml:"maxQueueSizeBytes"`
	CurrentQueueSizeBytes    *int64  `json:"currentQueueSizeBytes,omitempty" yaml:"currentQueueSizeBytes,omitempty"`
	RemainingBytesToBeSynced *int64  `json:"remainingBytesToBeSynced,omitempty" yaml:"remainingBytesToBeSynced,omitempty"`
	LatestResponseCode       *int32  `json:"latestResponseCode,omitempty" yaml:"latestResponseCode,omitempty"`
	LatestErrorMessage       *string `json:"latestErrorMessage,omitempty" yaml:"latestErrorMessage,omitempty"`
	DropNonRetryableData     *bool   `json:"dropNonRetryableData,omitempty" yaml:"dropNonRetryableData,omitempty"`
}

// NewReplication instantiates a new Replication object
// This constructor will assign default values to properties that have it defined,
// and makes sure properties required by API are set, but the set of arguments
// will change when the set of required properties is changed
func NewReplication(id string, name string, orgID string, remoteID string, localBucketID string, maxQueueSizeBytes int64) *Replication {
	this := Replication{}
	this.Id = id
	this.Name = name
	this.OrgID = orgID
	this.RemoteID = remoteID
	this.LocalBucketID = localBucketID
	this.MaxQueueSizeBytes = maxQueueSizeBytes
	return &this
}

// NewReplicationWithDefaults instantiates a new Replication object
// This constructor will only assign default values to properties that have it defined,
// but it doesn't guarantee that properties required by API are set
func NewReplicationWithDefaults() *Replication {
	this := Replication{}
	return &this
}

// GetId returns the Id field value
func (o *Replication) GetId() string {
	if o == nil {
		var ret string
		return ret
	}

	return o.Id
}

// GetIdOk returns a tuple with the Id field value
// and a boolean to check if the value has been set.
func (o *Replication) GetIdOk() (*string, bool) {
	if o == nil {
		return nil, false
	}
	return &o.Id, true
}

// SetId sets field value
func (o *Replication) SetId(v string) {
	o.Id = v
}

// GetName returns the Name field value
func (o *Replication) GetName() string {
	if o == nil {
		var ret string
		return ret
	}

	return o.Name
}

// GetNameOk returns a tuple with the Name field value
// and a boolean to check if the value has been set.
func (o *Replication) GetNameOk() (*string, bool) {
	if o == nil {
		return nil, false
	}
	return &o.Name, true
}

// SetName sets field value
func (o *Replication) SetName(v string) {
	o.Name = v
}

// GetDescription returns the Description field value if set, zero value otherwise.
func (o *Replication) GetDescription() string {
	if o == nil || o.Description == nil {
		var ret string
		return ret
	}
	return *o.Description
}

// GetDescriptionOk returns a tuple with the Description field value if set, nil otherwise
// and a boolean to check if the value has been set.
func (o *Replication) GetDescriptionOk() (*string, bool) {
	if o == nil || o.Description == nil {
		return nil, false
	}
	return o.Description, true
}

// HasDescription returns a boolean if a field has been set.
func (o *Replication) HasDescription() bool {
	if o != nil && o.Description != nil {
		return true
	}

	return false
}

// SetDescription gets a reference to the given string and assigns it to the Description field.
func (o *Replication) SetDescription(v string) {
	o.Description = &v
}

// GetOrgID returns the OrgID field value
func (o *Replication) GetOrgID() string {
	if o == nil {
		var ret string
		return ret
	}

	return o.OrgID
}

// GetOrgIDOk returns a tuple with the OrgID field value
// and a boolean to check if the value has been set.
func (o *Replication) GetOrgIDOk() (*string, bool) {
	if o == nil {
		return nil, false
	}
	return &o.OrgID, true
}

// SetOrgID sets field value
func (o *Replication) SetOrgID(v string) {
	o.OrgID = v
}

// GetRemoteID returns the RemoteID field value
func (o *Replication) GetRemoteID() string {
	if o == nil {
		var ret string
		return ret
	}

	return o.RemoteID
}

// GetRemoteIDOk returns a tuple with the RemoteID field value
// and a boolean to check if the value has been set.
func (o *Replication) GetRemoteIDOk() (*string, bool) {
	if o == nil {
		return nil, false
	}
	return &o.RemoteID, true
}

// SetRemoteID sets field value
func (o *Replication) SetRemoteID(v string) {
	o.RemoteID = v
}

// GetLocalBucketID returns the LocalBucketID field value
func (o *Replication) GetLocalBucketID() string {
	if o == nil {
		var ret string
		return ret
	}

	return o.LocalBucketID
}

// GetLocalBucketIDOk returns a tuple with the LocalBucketID field value
// and a boolean to check if the value has been set.
func (o *Replication) GetLocalBucketIDOk() (*string, bool) {
	if o == nil {
		return nil, false
	}
	return &o.LocalBucketID, true
}

// SetLocalBucketID sets field value
func (o *Replication) SetLocalBucketID(v string) {
	o.LocalBucketID = v
}

// GetRemoteBucketID returns the RemoteBucketID field value if set, zero value otherwise.
func (o *Replication) GetRemoteBucketID() string {
	if o == nil || o.RemoteBucketID == nil {
		var ret string
		return ret
	}
	return *o.RemoteBucketID
}

// GetRemoteBucketIDOk returns a tuple with the RemoteBucketID field value if set, nil otherwise
// and a boolean to check if the value has been set.
func (o *Replication) GetRemoteBucketIDOk() (*string, bool) {
	if o == nil || o.RemoteBucketID == nil {
		return nil, false
	}
	return o.RemoteBucketID, true
}

// HasRemoteBucketID returns a boolean if a field has been set.
func (o *Replication) HasRemoteBucketID() bool {
	if o != nil && o.RemoteBucketID != nil {
		return true
	}

	return false
}

// SetRemoteBucketID gets a reference to the given string and assigns it to the RemoteBucketID field.
func (o *Replication) SetRemoteBucketID(v string) {
	o.RemoteBucketID = &v
}

// GetRemoteBucketName returns the RemoteBucketName field value if set, zero value otherwise.
func (o *Replication) GetRemoteBucketName() string {
	if o == nil || o.RemoteBucketName == nil {
		var ret string
		return ret
	}
	return *o.RemoteBucketName
}

// GetRemoteBucketNameOk returns a tuple with the RemoteBucketName field value if set, nil otherwise
// and a boolean to check if the value has been set.
func (o *Replication) GetRemoteBucketNameOk() (*string, bool) {
	if o == nil || o.RemoteBucketName == nil {
		return nil, false
	}
	return o.RemoteBucketName, true
}

// HasRemoteBucketName returns a boolean if a field has been set.
func (o *Replication) HasRemoteBucketName() bool {
	if o != nil && o.RemoteBucketName != nil {
		return true
	}

	return false
}

// SetRemoteBucketName gets a reference to the given string and assigns it to the RemoteBucketName field.
func (o *Replication) SetRemoteBucketName(v string) {
	o.RemoteBucketName = &v
}

// GetMaxQueueSizeBytes returns the MaxQueueSizeBytes field value
func (o *Replication) GetMaxQueueSizeBytes() int64 {
	if o == nil {
		var ret int64
		return ret
	}

	return o.MaxQueueSizeBytes
}

// GetMaxQueueSizeBytesOk returns a tuple with the MaxQueueSizeBytes field value
// and a boolean to check if the value has been set.
func (o *Replication) GetMaxQueueSizeBytesOk() (*int64, bool) {
	if o == nil {
		return nil, false
	}
	return &o.MaxQueueSizeBytes, true
}

// SetMaxQueueSizeBytes sets field value
func (o *Replication) SetMaxQueueSizeBytes(v int64) {
	o.MaxQueueSizeBytes = v
}

// GetCurrentQueueSizeBytes returns the CurrentQueueSizeBytes field value if set, zero value otherwise.
func (o *Replication) GetCurrentQueueSizeBytes() int64 {
	if o == nil || o.CurrentQueueSizeBytes == nil {
		var ret int64
		return ret
	}
	return *o.CurrentQueueSizeBytes
}

// GetCurrentQueueSizeBytesOk returns a tuple with the CurrentQueueSizeBytes field value if set, nil otherwise
// and a boolean to check if the value has been set.
func (o *Replication) GetCurrentQueueSizeBytesOk() (*int64, bool) {
	if o == nil || o.CurrentQueueSizeBytes == nil {
		return nil, false
	}
	return o.CurrentQueueSizeBytes, true
}

// HasCurrentQueueSizeBytes returns a boolean if a field has been set.
func (o *Replication) HasCurrentQueueSizeBytes() bool {
	if o != nil && o.CurrentQueueSizeBytes != nil {
		return true
	}

	return false
}

// SetCurrentQueueSizeBytes gets a reference to the given int64 and assigns it to the CurrentQueueSizeBytes field.
func (o *Replication) SetCurrentQueueSizeBytes(v int64) {
	o.CurrentQueueSizeBytes = &v
}

// GetRemainingBytesToBeSynced returns the RemainingBytesToBeSynced field value if set, zero value otherwise.
func (o *Replication) GetRemainingBytesToBeSynced() int64 {
	if o == nil || o.RemainingBytesToBeSynced == nil {
		var ret int64
		return ret
	}
	return *o.RemainingBytesToBeSynced
}

// GetRemainingBytesToBeSyncedOk returns a tuple with the RemainingBytesToBeSynced field value if set, nil otherwise
// and a boolean to check if the value has been set.
func (o *Replication) GetRemainingBytesToBeSyncedOk() (*int64, bool) {
	if o == nil || o.RemainingBytesToBeSynced == nil {
		return nil, false
	}
	return o.RemainingBytesToBeSynced, true
}

// HasRemainingBytesToBeSynced returns a boolean if a field has been set.
func (o *Replication) HasRemainingBytesToBeSynced() bool {
	if o != nil && o.RemainingBytesToBeSynced != nil {
		return true
	}

	return false
}

// SetRemainingBytesToBeSynced gets a reference to the given int64 and assigns it to the RemainingBytesToBeSynced field.
func (o *Replication) SetRemainingBytesToBeSynced(v int64) {
	o.RemainingBytesToBeSynced = &v
}

// GetLatestResponseCode returns the LatestResponseCode field value if set, zero value otherwise.
func (o *Replication) GetLatestResponseCode() int32 {
	if o == nil || o.LatestResponseCode == nil {
		var ret int32
		return ret
	}
	return *o.LatestResponseCode
}

// GetLatestResponseCodeOk returns a tuple with the LatestResponseCode field value if set, nil otherwise
// and a boolean to check if the value has been set.
func (o *Replication) GetLatestResponseCodeOk() (*int32, bool) {
	if o == nil || o.LatestResponseCode == nil {
		return nil, false
	}
	return o.LatestResponseCode, true
}

// HasLatestResponseCode returns a boolean if a field has been set.
func (o *Replication) HasLatestResponseCode() bool {
	if o != nil && o.LatestResponseCode != nil {
		return true
	}

	return false
}

// SetLatestResponseCode gets a reference to the given int32 and assigns it to the LatestResponseCode field.
func (o *Replication) SetLatestResponseCode(v int32) {
	o.LatestResponseCode = &v
}

// GetLatestErrorMessage returns the LatestErrorMessage field value if set, zero value otherwise.
func (o *Replication) GetLatestErrorMessage() string {
	if o == nil || o.LatestErrorMessage == nil {
		var ret string
		return ret
	}
	return *o.LatestErrorMessage
}

// GetLatestErrorMessageOk returns a tuple with the LatestErrorMessage field value if set, nil otherwise
// and a boolean to check if the value has been set.
func (o *Replication) GetLatestErrorMessageOk() (*string, bool) {
	if o == nil || o.LatestErrorMessage == nil {
		return nil, false
	}
	return o.LatestErrorMessage, true
}

// HasLatestErrorMessage returns a boolean if a field has been set.
func (o *Replication) HasLatestErrorMessage() bool {
	if o != nil && o.LatestErrorMessage != nil {
		return true
	}

	return false
}

// SetLatestErrorMessage gets a reference to the given string and assigns it to the LatestErrorMessage field.
func (o *Replication) SetLatestErrorMessage(v string) {
	o.LatestErrorMessage = &v
}

// GetDropNonRetryableData returns the DropNonRetryableData field value if set, zero value otherwise.
func (o *Replication) GetDropNonRetryableData() bool {
	if o == nil || o.DropNonRetryableData == nil {
		var ret bool
		return ret
	}
	return *o.DropNonRetryableData
}

// GetDropNonRetryableDataOk returns a tuple with the DropNonRetryableData field value if set, nil otherwise
// and a boolean to check if the value has been set.
func (o *Replication) GetDropNonRetryableDataOk() (*bool, bool) {
	if o == nil || o.DropNonRetryableData == nil {
		return nil, false
	}
	return o.DropNonRetryableData, true
}

// HasDropNonRetryableData returns a boolean if a field has been set.
func (o *Replication) HasDropNonRetryableData() bool {
	if o != nil && o.DropNonRetryableData != nil {
		return true
	}

	return false
}

// SetDropNonRetryableData gets a reference to the given bool and assigns it to the DropNonRetryableData field.
func (o *Replication) SetDropNonRetryableData(v bool) {
	o.DropNonRetryableData = &v
}

func (o Replication) MarshalJSON() ([]byte, error) {
	toSerialize := map[string]interface{}{}
	if true {
		toSerialize["id"] = o.Id
	}
	if true {
		toSerialize["name"] = o.Name
	}
	if o.Description != nil {
		toSerialize["description"] = o.Description
	}
	if true {
		toSerialize["orgID"] = o.OrgID
	}
	if true {
		toSerialize["remoteID"] = o.RemoteID
	}
	if true {
		toSerialize["localBucketID"] = o.LocalBucketID
	}
	if o.RemoteBucketID != nil {
		toSerialize["remoteBucketID"] = o.RemoteBucketID
	}
	if o.RemoteBucketName != nil {
		toSerialize["remoteBucketName"] = o.RemoteBucketName
	}
	if true {
		toSerialize["maxQueueSizeBytes"] = o.MaxQueueSizeBytes
	}
	if o.CurrentQueueSizeBytes != nil {
		toSerialize["currentQueueSizeBytes"] = o.CurrentQueueSizeBytes
	}
	if o.RemainingBytesToBeSynced != nil {
		toSerialize["remainingBytesToBeSynced"] = o.RemainingBytesToBeSynced
	}
	if o.LatestResponseCode != nil {
		toSerialize["latestResponseCode"] = o.LatestResponseCode
	}
	if o.LatestErrorMessage != nil {
		toSerialize["latestErrorMessage"] = o.LatestErrorMessage
	}
	if o.DropNonRetryableData != nil {
		toSerialize["dropNonRetryableData"] = o.DropNonRetryableData
	}
	return json.Marshal(toSerialize)
}

type NullableReplication struct {
	value *Replication
	isSet bool
}

func (v NullableReplication) Get() *Replication {
	return v.value
}

func (v *NullableReplication) Set(val *Replication) {
	v.value = val
	v.isSet = true
}

func (v NullableReplication) IsSet() bool {
	return v.isSet
}

func (v *NullableReplication) Unset() {
	v.value = nil
	v.isSet = false
}

func NewNullableReplication(val *Replication) *NullableReplication {
	return &NullableReplication{value: val, isSet: true}
}

func (v NullableReplication) MarshalJSON() ([]byte, error) {
	return json.Marshal(v.value)
}

func (v *NullableReplication) UnmarshalJSON(src []byte) error {
	v.isSet = true
	return json.Unmarshal(src, &v.value)
}
