1// Copyright 2012-present Oliver Eilhard. All rights reserved. 2// Use of this source code is governed by a MIT-license. 3// See http://olivere.mit-license.org/license.txt for details. 4 5package elastic 6 7import ( 8 "context" 9 "fmt" 10 "net/url" 11 12 "gopkg.in/olivere/elastic.v5/uritemplates" 13) 14 15// DeleteTemplateService deletes a search template. More information can 16// be found at https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-template.html. 17type DeleteTemplateService struct { 18 client *Client 19 pretty bool 20 id string 21 version *int 22 versionType string 23} 24 25// NewDeleteTemplateService creates a new DeleteTemplateService. 26func NewDeleteTemplateService(client *Client) *DeleteTemplateService { 27 return &DeleteTemplateService{ 28 client: client, 29 } 30} 31 32// Id is the template ID. 33func (s *DeleteTemplateService) Id(id string) *DeleteTemplateService { 34 s.id = id 35 return s 36} 37 38// Version an explicit version number for concurrency control. 39func (s *DeleteTemplateService) Version(version int) *DeleteTemplateService { 40 s.version = &version 41 return s 42} 43 44// VersionType specifies a version type. 45func (s *DeleteTemplateService) VersionType(versionType string) *DeleteTemplateService { 46 s.versionType = versionType 47 return s 48} 49 50// buildURL builds the URL for the operation. 51func (s *DeleteTemplateService) buildURL() (string, url.Values, error) { 52 // Build URL 53 path, err := uritemplates.Expand("/_search/template/{id}", map[string]string{ 54 "id": s.id, 55 }) 56 if err != nil { 57 return "", url.Values{}, err 58 } 59 60 // Add query string parameters 61 params := url.Values{} 62 if s.version != nil { 63 params.Set("version", fmt.Sprintf("%d", *s.version)) 64 } 65 if s.versionType != "" { 66 params.Set("version_type", s.versionType) 67 } 68 69 return path, params, nil 70} 71 72// Validate checks if the operation is valid. 73func (s *DeleteTemplateService) Validate() error { 74 var invalid []string 75 if s.id == "" { 76 invalid = append(invalid, "Id") 77 } 78 if len(invalid) > 0 { 79 return fmt.Errorf("missing required fields: %v", invalid) 80 } 81 return nil 82} 83 84// Do executes the operation. 85func (s *DeleteTemplateService) Do(ctx context.Context) (*AcknowledgedResponse, error) { 86 // Check pre-conditions 87 if err := s.Validate(); err != nil { 88 return nil, err 89 } 90 91 // Get URL for request 92 path, params, err := s.buildURL() 93 if err != nil { 94 return nil, err 95 } 96 97 // Get HTTP response 98 res, err := s.client.PerformRequest(ctx, "DELETE", path, params, nil) 99 if err != nil { 100 return nil, err 101 } 102 103 // Return operation response 104 ret := new(AcknowledgedResponse) 105 if err := s.client.decoder.Decode(res.Body, ret); err != nil { 106 return nil, err 107 } 108 return ret, nil 109} 110