1// Copyright (c) 2016, 2018, 2019, Oracle and/or its affiliates. All rights reserved.
2// Code generated. DO NOT EDIT.
3
4// Announcements Service API
5//
6// Manage Oracle Cloud Infrastructure console announcements.
7//
8
9package announcementsservice
10
11import (
12	"context"
13	"fmt"
14	"github.com/oracle/oci-go-sdk/common"
15	"net/http"
16)
17
18//AnnouncementClient a client for Announcement
19type AnnouncementClient struct {
20	common.BaseClient
21	config *common.ConfigurationProvider
22}
23
24// NewAnnouncementClientWithConfigurationProvider Creates a new default Announcement client with the given configuration provider.
25// the configuration provider will be used for the default signer as well as reading the region
26func NewAnnouncementClientWithConfigurationProvider(configProvider common.ConfigurationProvider) (client AnnouncementClient, err error) {
27	baseClient, err := common.NewClientWithConfig(configProvider)
28	if err != nil {
29		return
30	}
31
32	client = AnnouncementClient{BaseClient: baseClient}
33	client.BasePath = "20180904"
34	err = client.setConfigurationProvider(configProvider)
35	return
36}
37
38// SetRegion overrides the region of this client.
39func (client *AnnouncementClient) SetRegion(region string) {
40	client.Host = common.StringToRegion(region).Endpoint("announcements")
41}
42
43// SetConfigurationProvider sets the configuration provider including the region, returns an error if is not valid
44func (client *AnnouncementClient) setConfigurationProvider(configProvider common.ConfigurationProvider) error {
45	if ok, err := common.IsConfigurationProviderValid(configProvider); !ok {
46		return err
47	}
48
49	// Error has been checked already
50	region, _ := configProvider.Region()
51	client.SetRegion(region)
52	client.config = &configProvider
53	return nil
54}
55
56// ConfigurationProvider the ConfigurationProvider used in this client, or null if none set
57func (client *AnnouncementClient) ConfigurationProvider() *common.ConfigurationProvider {
58	return client.config
59}
60
61// GetAnnouncement Gets the details of a specific announcement.
62func (client AnnouncementClient) GetAnnouncement(ctx context.Context, request GetAnnouncementRequest) (response GetAnnouncementResponse, err error) {
63	var ociResponse common.OCIResponse
64	policy := common.NoRetryPolicy()
65	if request.RetryPolicy() != nil {
66		policy = *request.RetryPolicy()
67	}
68	ociResponse, err = common.Retry(ctx, request, client.getAnnouncement, policy)
69	if err != nil {
70		if ociResponse != nil {
71			response = GetAnnouncementResponse{RawResponse: ociResponse.HTTPResponse()}
72		}
73		return
74	}
75	if convertedResponse, ok := ociResponse.(GetAnnouncementResponse); ok {
76		response = convertedResponse
77	} else {
78		err = fmt.Errorf("failed to convert OCIResponse into GetAnnouncementResponse")
79	}
80	return
81}
82
83// getAnnouncement implements the OCIOperation interface (enables retrying operations)
84func (client AnnouncementClient) getAnnouncement(ctx context.Context, request common.OCIRequest) (common.OCIResponse, error) {
85	httpRequest, err := request.HTTPRequest(http.MethodGet, "/announcements/{announcementId}")
86	if err != nil {
87		return nil, err
88	}
89
90	var response GetAnnouncementResponse
91	var httpResponse *http.Response
92	httpResponse, err = client.Call(ctx, &httpRequest)
93	defer common.CloseBodyIfValid(httpResponse)
94	response.RawResponse = httpResponse
95	if err != nil {
96		return response, err
97	}
98
99	err = common.UnmarshalResponse(httpResponse, &response)
100	return response, err
101}
102
103// GetAnnouncementUserStatus Gets information about whether a specific announcement was acknowledged by a user.
104func (client AnnouncementClient) GetAnnouncementUserStatus(ctx context.Context, request GetAnnouncementUserStatusRequest) (response GetAnnouncementUserStatusResponse, err error) {
105	var ociResponse common.OCIResponse
106	policy := common.NoRetryPolicy()
107	if request.RetryPolicy() != nil {
108		policy = *request.RetryPolicy()
109	}
110	ociResponse, err = common.Retry(ctx, request, client.getAnnouncementUserStatus, policy)
111	if err != nil {
112		if ociResponse != nil {
113			response = GetAnnouncementUserStatusResponse{RawResponse: ociResponse.HTTPResponse()}
114		}
115		return
116	}
117	if convertedResponse, ok := ociResponse.(GetAnnouncementUserStatusResponse); ok {
118		response = convertedResponse
119	} else {
120		err = fmt.Errorf("failed to convert OCIResponse into GetAnnouncementUserStatusResponse")
121	}
122	return
123}
124
125// getAnnouncementUserStatus implements the OCIOperation interface (enables retrying operations)
126func (client AnnouncementClient) getAnnouncementUserStatus(ctx context.Context, request common.OCIRequest) (common.OCIResponse, error) {
127	httpRequest, err := request.HTTPRequest(http.MethodGet, "/announcements/{announcementId}/userStatus")
128	if err != nil {
129		return nil, err
130	}
131
132	var response GetAnnouncementUserStatusResponse
133	var httpResponse *http.Response
134	httpResponse, err = client.Call(ctx, &httpRequest)
135	defer common.CloseBodyIfValid(httpResponse)
136	response.RawResponse = httpResponse
137	if err != nil {
138		return response, err
139	}
140
141	err = common.UnmarshalResponse(httpResponse, &response)
142	return response, err
143}
144
145// ListAnnouncements Gets a list of announcements for the current tenancy.
146func (client AnnouncementClient) ListAnnouncements(ctx context.Context, request ListAnnouncementsRequest) (response ListAnnouncementsResponse, err error) {
147	var ociResponse common.OCIResponse
148	policy := common.NoRetryPolicy()
149	if request.RetryPolicy() != nil {
150		policy = *request.RetryPolicy()
151	}
152	ociResponse, err = common.Retry(ctx, request, client.listAnnouncements, policy)
153	if err != nil {
154		if ociResponse != nil {
155			response = ListAnnouncementsResponse{RawResponse: ociResponse.HTTPResponse()}
156		}
157		return
158	}
159	if convertedResponse, ok := ociResponse.(ListAnnouncementsResponse); ok {
160		response = convertedResponse
161	} else {
162		err = fmt.Errorf("failed to convert OCIResponse into ListAnnouncementsResponse")
163	}
164	return
165}
166
167// listAnnouncements implements the OCIOperation interface (enables retrying operations)
168func (client AnnouncementClient) listAnnouncements(ctx context.Context, request common.OCIRequest) (common.OCIResponse, error) {
169	httpRequest, err := request.HTTPRequest(http.MethodGet, "/announcements")
170	if err != nil {
171		return nil, err
172	}
173
174	var response ListAnnouncementsResponse
175	var httpResponse *http.Response
176	httpResponse, err = client.Call(ctx, &httpRequest)
177	defer common.CloseBodyIfValid(httpResponse)
178	response.RawResponse = httpResponse
179	if err != nil {
180		return response, err
181	}
182
183	err = common.UnmarshalResponse(httpResponse, &response)
184	return response, err
185}
186
187// UpdateAnnouncementUserStatus Updates the status of the specified announcement with regard to whether it has been marked as read.
188func (client AnnouncementClient) UpdateAnnouncementUserStatus(ctx context.Context, request UpdateAnnouncementUserStatusRequest) (response UpdateAnnouncementUserStatusResponse, err error) {
189	var ociResponse common.OCIResponse
190	policy := common.NoRetryPolicy()
191	if request.RetryPolicy() != nil {
192		policy = *request.RetryPolicy()
193	}
194	ociResponse, err = common.Retry(ctx, request, client.updateAnnouncementUserStatus, policy)
195	if err != nil {
196		if ociResponse != nil {
197			response = UpdateAnnouncementUserStatusResponse{RawResponse: ociResponse.HTTPResponse()}
198		}
199		return
200	}
201	if convertedResponse, ok := ociResponse.(UpdateAnnouncementUserStatusResponse); ok {
202		response = convertedResponse
203	} else {
204		err = fmt.Errorf("failed to convert OCIResponse into UpdateAnnouncementUserStatusResponse")
205	}
206	return
207}
208
209// updateAnnouncementUserStatus implements the OCIOperation interface (enables retrying operations)
210func (client AnnouncementClient) updateAnnouncementUserStatus(ctx context.Context, request common.OCIRequest) (common.OCIResponse, error) {
211	httpRequest, err := request.HTTPRequest(http.MethodPut, "/announcements/{announcementId}/userStatus")
212	if err != nil {
213		return nil, err
214	}
215
216	var response UpdateAnnouncementUserStatusResponse
217	var httpResponse *http.Response
218	httpResponse, err = client.Call(ctx, &httpRequest)
219	defer common.CloseBodyIfValid(httpResponse)
220	response.RawResponse = httpResponse
221	if err != nil {
222		return response, err
223	}
224
225	err = common.UnmarshalResponse(httpResponse, &response)
226	return response, err
227}
228