1// Copyright (c) 2016, 2018, 2020, Oracle and/or its affiliates.  All rights reserved.
2// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license.
3// Code generated. DO NOT EDIT.
4
5// Core Services API
6//
7// API covering the Networking (https://docs.cloud.oracle.com/iaas/Content/Network/Concepts/overview.htm),
8// Compute (https://docs.cloud.oracle.com/iaas/Content/Compute/Concepts/computeoverview.htm), and
9// Block Volume (https://docs.cloud.oracle.com/iaas/Content/Block/Concepts/overview.htm) services. Use this API
10// to manage resources such as virtual cloud networks (VCNs), compute instances, and
11// block storage volumes.
12//
13
14package core
15
16import (
17	"encoding/json"
18	"github.com/oracle/oci-go-sdk/common"
19)
20
21// CreateInstanceConfigurationBase Creation details for an instance configuration.
22type CreateInstanceConfigurationBase interface {
23
24	// The OCID (https://docs.cloud.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the compartment
25	// containing the instance configuration.
26	GetCompartmentId() *string
27
28	// Defined tags for this resource. Each key is predefined and scoped to a
29	// namespace. For more information, see Resource Tags (https://docs.cloud.oracle.com/Content/General/Concepts/resourcetags.htm).
30	// Example: `{"Operations": {"CostCenter": "42"}}`
31	GetDefinedTags() map[string]map[string]interface{}
32
33	// A user-friendly name for the instance configuration.  Does not have to be unique,
34	// and it's changeable. Avoid entering confidential information.
35	GetDisplayName() *string
36
37	// Free-form tags for this resource. Each tag is a simple key-value pair with no
38	// predefined name, type, or namespace. For more information, see Resource Tags (https://docs.cloud.oracle.com/Content/General/Concepts/resourcetags.htm).
39	// Example: `{"Department": "Finance"}`
40	GetFreeformTags() map[string]string
41}
42
43type createinstanceconfigurationbase struct {
44	JsonData      []byte
45	CompartmentId *string                           `mandatory:"true" json:"compartmentId"`
46	DefinedTags   map[string]map[string]interface{} `mandatory:"false" json:"definedTags"`
47	DisplayName   *string                           `mandatory:"false" json:"displayName"`
48	FreeformTags  map[string]string                 `mandatory:"false" json:"freeformTags"`
49	Source        string                            `json:"source"`
50}
51
52// UnmarshalJSON unmarshals json
53func (m *createinstanceconfigurationbase) UnmarshalJSON(data []byte) error {
54	m.JsonData = data
55	type Unmarshalercreateinstanceconfigurationbase createinstanceconfigurationbase
56	s := struct {
57		Model Unmarshalercreateinstanceconfigurationbase
58	}{}
59	err := json.Unmarshal(data, &s.Model)
60	if err != nil {
61		return err
62	}
63	m.CompartmentId = s.Model.CompartmentId
64	m.DefinedTags = s.Model.DefinedTags
65	m.DisplayName = s.Model.DisplayName
66	m.FreeformTags = s.Model.FreeformTags
67	m.Source = s.Model.Source
68
69	return err
70}
71
72// UnmarshalPolymorphicJSON unmarshals polymorphic json
73func (m *createinstanceconfigurationbase) UnmarshalPolymorphicJSON(data []byte) (interface{}, error) {
74
75	if data == nil || string(data) == "null" {
76		return nil, nil
77	}
78
79	var err error
80	switch m.Source {
81	case "NONE":
82		mm := CreateInstanceConfigurationDetails{}
83		err = json.Unmarshal(data, &mm)
84		return mm, err
85	case "INSTANCE":
86		mm := CreateInstanceConfigurationFromInstanceDetails{}
87		err = json.Unmarshal(data, &mm)
88		return mm, err
89	default:
90		return *m, nil
91	}
92}
93
94//GetCompartmentId returns CompartmentId
95func (m createinstanceconfigurationbase) GetCompartmentId() *string {
96	return m.CompartmentId
97}
98
99//GetDefinedTags returns DefinedTags
100func (m createinstanceconfigurationbase) GetDefinedTags() map[string]map[string]interface{} {
101	return m.DefinedTags
102}
103
104//GetDisplayName returns DisplayName
105func (m createinstanceconfigurationbase) GetDisplayName() *string {
106	return m.DisplayName
107}
108
109//GetFreeformTags returns FreeformTags
110func (m createinstanceconfigurationbase) GetFreeformTags() map[string]string {
111	return m.FreeformTags
112}
113
114func (m createinstanceconfigurationbase) String() string {
115	return common.PointerString(m)
116}
117
118// CreateInstanceConfigurationBaseSourceEnum Enum with underlying type: string
119type CreateInstanceConfigurationBaseSourceEnum string
120
121// Set of constants representing the allowable values for CreateInstanceConfigurationBaseSourceEnum
122const (
123	CreateInstanceConfigurationBaseSourceNone     CreateInstanceConfigurationBaseSourceEnum = "NONE"
124	CreateInstanceConfigurationBaseSourceInstance CreateInstanceConfigurationBaseSourceEnum = "INSTANCE"
125)
126
127var mappingCreateInstanceConfigurationBaseSource = map[string]CreateInstanceConfigurationBaseSourceEnum{
128	"NONE":     CreateInstanceConfigurationBaseSourceNone,
129	"INSTANCE": CreateInstanceConfigurationBaseSourceInstance,
130}
131
132// GetCreateInstanceConfigurationBaseSourceEnumValues Enumerates the set of values for CreateInstanceConfigurationBaseSourceEnum
133func GetCreateInstanceConfigurationBaseSourceEnumValues() []CreateInstanceConfigurationBaseSourceEnum {
134	values := make([]CreateInstanceConfigurationBaseSourceEnum, 0)
135	for _, v := range mappingCreateInstanceConfigurationBaseSource {
136		values = append(values, v)
137	}
138	return values
139}
140