// Copyright AGNTCY Contributors (https://github.com/agntcy)
// SPDX-License-Identifier: Apache-2.0
/*
Agent Manifest Definition

No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)

API version: 0.1
*/

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

package manifests

import (
	"encoding/json"
)

// checks if the DeploymentManifest type satisfies the MappedNullable interface at compile time
var _ MappedNullable = &DeploymentManifest{}

// DeploymentManifest Describe all the ACP specs of an agent, including schemas and protocol features.
type DeploymentManifest struct {
	Acp        AgentACPSpecs   `json:"acp"`
	Deployment AgentDeployment `json:"deployment"`
}

// NewDeploymentManifest instantiates a new DeploymentManifest 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 NewDeploymentManifest(acp AgentACPSpecs, deployment AgentDeployment) *DeploymentManifest {
	this := DeploymentManifest{}
	this.Acp = acp
	this.Deployment = deployment
	return &this
}

// NewDeploymentManifestWithDefaults instantiates a new DeploymentManifest 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 NewDeploymentManifestWithDefaults() *DeploymentManifest {
	this := DeploymentManifest{}
	return &this
}

// GetAcp returns the Acp field value
func (o *DeploymentManifest) GetAcp() AgentACPSpecs {
	if o == nil {
		var ret AgentACPSpecs
		return ret
	}

	return o.Acp
}

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

// SetAcp sets field value
func (o *DeploymentManifest) SetAcp(v AgentACPSpecs) {
	o.Acp = v
}

// GetDeployment returns the Deployment field value
func (o *DeploymentManifest) GetDeployment() AgentDeployment {
	if o == nil {
		var ret AgentDeployment
		return ret
	}

	return o.Deployment
}

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

// SetDeployment sets field value
func (o *DeploymentManifest) SetDeployment(v AgentDeployment) {
	o.Deployment = v
}

func (o DeploymentManifest) MarshalJSON() ([]byte, error) {
	toSerialize, err := o.ToMap()
	if err != nil {
		return []byte{}, err
	}
	return json.Marshal(toSerialize)
}

func (o DeploymentManifest) ToMap() (map[string]interface{}, error) {
	toSerialize := map[string]interface{}{}
	toSerialize["acp"] = o.Acp
	toSerialize["deployment"] = o.Deployment
	return toSerialize, nil
}

type NullableDeploymentManifest struct {
	value *DeploymentManifest
	isSet bool
}

func (v NullableDeploymentManifest) Get() *DeploymentManifest {
	return v.value
}

func (v *NullableDeploymentManifest) Set(val *DeploymentManifest) {
	v.value = val
	v.isSet = true
}

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

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

func NewNullableDeploymentManifest(val *DeploymentManifest) *NullableDeploymentManifest {
	return &NullableDeploymentManifest{value: val, isSet: true}
}

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

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