github.com/sacloud/iaas-api-go@v1.12.0/internal/define/cdrom.go (about) 1 // Copyright 2022-2023 The sacloud/iaas-api-go Authors 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package define 16 17 import ( 18 "net/http" 19 20 "github.com/sacloud/iaas-api-go/internal/define/names" 21 "github.com/sacloud/iaas-api-go/internal/define/ops" 22 "github.com/sacloud/iaas-api-go/internal/dsl" 23 "github.com/sacloud/iaas-api-go/internal/dsl/meta" 24 "github.com/sacloud/iaas-api-go/naked" 25 ) 26 27 const ( 28 cdromAPIName = "CDROM" 29 cdromAPIPathName = "cdrom" 30 ) 31 32 var cdromAPI = &dsl.Resource{ 33 Name: cdromAPIName, 34 PathName: cdromAPIPathName, 35 PathSuffix: dsl.CloudAPISuffix, 36 Operations: dsl.Operations{ 37 // find 38 ops.Find(cdromAPIName, cdromNakedType, findParameter, cdromView), 39 40 // create 41 { 42 ResourceName: cdromAPIName, 43 Name: "Create", 44 PathFormat: dsl.DefaultPathFormat, 45 Method: http.MethodPost, 46 RequestEnvelope: dsl.RequestEnvelope(&dsl.EnvelopePayloadDesc{ 47 Name: names.ResourceFieldName(cdromAPIName, dsl.PayloadForms.Singular), 48 Type: cdromNakedType, 49 }), 50 ResponseEnvelope: dsl.ResponseEnvelope( 51 &dsl.EnvelopePayloadDesc{ 52 Name: names.ResourceFieldName(cdromAPIName, dsl.PayloadForms.Singular), 53 Type: cdromNakedType, 54 }, 55 &dsl.EnvelopePayloadDesc{ 56 Name: models.ftpServer().Name, 57 Type: meta.Static(naked.OpeningFTPServer{}), 58 }, 59 ), 60 Arguments: dsl.Arguments{ 61 dsl.MappableArgument("param", cdromCreateParam, names.ResourceFieldName(cdromAPIName, dsl.PayloadForms.Singular)), 62 }, 63 Results: dsl.Results{ 64 { 65 SourceField: names.ResourceFieldName(cdromAPIName, dsl.PayloadForms.Singular), 66 DestField: cdromView.Name, 67 IsPlural: false, 68 Model: cdromView, 69 }, 70 { 71 SourceField: models.ftpServer().Name, 72 DestField: models.ftpServer().Name, 73 IsPlural: false, 74 Model: models.ftpServer(), 75 }, 76 }, 77 }, 78 79 // read 80 ops.Read(cdromAPIName, cdromNakedType, cdromView), 81 82 // update 83 ops.Update(cdromAPIName, cdromNakedType, cdromUpdateParam, cdromView), 84 85 // delete 86 ops.Delete(cdromAPIName), 87 88 // openFTP 89 ops.OpenFTP(cdromAPIName, models.ftpServerOpenParameter(), models.ftpServer()), 90 91 // closeFTP 92 ops.CloseFTP(cdromAPIName), 93 }, 94 } 95 var ( 96 cdromNakedType = meta.Static(naked.CDROM{}) 97 98 cdromView = &dsl.Model{ 99 Name: cdromAPIName, 100 NakedType: cdromNakedType, 101 Fields: []*dsl.FieldDesc{ 102 fields.ID(), 103 fields.Name(), 104 fields.Description(), 105 fields.DisplayOrder(), 106 fields.Tags(), 107 fields.Availability(), 108 fields.Scope(), 109 fields.Storage(), 110 fields.SizeMB(), 111 fields.IconID(), 112 fields.CreatedAt(), 113 fields.ModifiedAt(), 114 }, 115 } 116 117 cdromCreateParam = &dsl.Model{ 118 Name: names.CreateParameterName(cdromAPIName), 119 NakedType: cdromNakedType, 120 Fields: []*dsl.FieldDesc{ 121 fields.SizeMB(), 122 fields.Name(), 123 fields.Description(), 124 fields.Tags(), 125 fields.IconID(), 126 }, 127 } 128 129 cdromUpdateParam = &dsl.Model{ 130 Name: names.UpdateParameterName(cdromAPIName), 131 NakedType: cdromNakedType, 132 Fields: []*dsl.FieldDesc{ 133 fields.Name(), 134 fields.Description(), 135 fields.Tags(), 136 fields.IconID(), 137 }, 138 } 139 )