github.com/sacloud/iaas-api-go@v1.12.0/internal/define/ipv6addr.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 ipv6AddrAPIName = "IPv6Addr" 29 ipv6AddrAPIPathName = "ipv6addr" 30 ) 31 32 var ipv6AddrAPI = &dsl.Resource{ 33 Name: ipv6AddrAPIName, 34 PathName: ipv6AddrAPIPathName, 35 PathSuffix: dsl.CloudAPISuffix, 36 Operations: dsl.Operations{ 37 // find 38 ops.Find(ipv6AddrAPIName, ipv6AddrNakedType, findParameter, ipv6AddrView), 39 40 // create 41 ops.Create(ipv6AddrAPIName, ipv6AddrNakedType, ipv6AddrCreateParam, ipv6AddrView), 42 43 // read (IDの代わりにipv6addrを利用) 44 { 45 ResourceName: ipv6AddrAPIName, 46 Name: "Read", 47 PathFormat: dsl.DefaultPathFormatWithID, 48 Method: http.MethodGet, 49 Arguments: dsl.Arguments{ 50 argIPv6Addr, 51 }, 52 ResponseEnvelope: dsl.ResponseEnvelope(&dsl.EnvelopePayloadDesc{ 53 Type: ipv6AddrNakedType, 54 Name: ipv6AddrAPIName, 55 }), 56 Results: dsl.Results{ 57 { 58 SourceField: ipv6AddrAPIName, 59 DestField: ipv6AddrView.Name, 60 IsPlural: false, 61 Model: ipv6AddrView, 62 }, 63 }, 64 }, 65 66 // update (IDの代わりにipv6addrを利用) 67 { 68 ResourceName: ipv6AddrAPIName, 69 Name: "Update", 70 PathFormat: dsl.DefaultPathFormatWithID, 71 Method: http.MethodPut, 72 RequestEnvelope: dsl.RequestEnvelope(&dsl.EnvelopePayloadDesc{ 73 Type: ipv6AddrNakedType, 74 Name: ipv6AddrAPIName, 75 }), 76 Arguments: dsl.Arguments{ 77 argIPv6Addr, 78 dsl.MappableArgument("param", ipv6AddrUpdateParam, ipv6AddrAPIName), 79 }, 80 ResponseEnvelope: dsl.ResponseEnvelope(&dsl.EnvelopePayloadDesc{ 81 Type: ipv6AddrNakedType, 82 Name: ipv6AddrAPIName, 83 }), 84 Results: dsl.Results{ 85 { 86 SourceField: ipv6AddrAPIName, 87 DestField: ipv6AddrView.Name, 88 IsPlural: false, 89 Model: ipv6AddrView, 90 }, 91 }, 92 }, 93 94 // delete (IDの代わりにipv6addrを利用) 95 { 96 ResourceName: ipv6AddrAPIName, 97 Name: "Delete", 98 PathFormat: dsl.DefaultPathFormatWithID, 99 Method: http.MethodDelete, 100 Arguments: dsl.Arguments{ 101 argIPv6Addr, 102 }, 103 }, 104 }, 105 } 106 107 var ( 108 argIPv6Addr = &dsl.Argument{ 109 Name: "ipv6addr", 110 Type: meta.TypeString, 111 PathFormatAlias: "id", 112 } 113 ) 114 115 var ( 116 ipv6AddrNakedType = meta.Static(naked.IPv6Addr{}) 117 118 ipv6AddrView = &dsl.Model{ 119 Name: ipv6AddrAPIName, 120 NakedType: ipv6AddrNakedType, 121 Fields: []*dsl.FieldDesc{ 122 fields.Def("IPv6Addr", meta.TypeString), 123 fields.HostName(), 124 fields.Def("IPv6NetID", meta.TypeID, mapConvTag("IPv6Net.ID")), 125 fields.Def("SwitchID", meta.TypeID, mapConvTag("IPv6Net.Switch.ID")), 126 fields.InterfaceID(), 127 }, 128 } 129 130 ipv6AddrCreateParam = &dsl.Model{ 131 Name: names.CreateParameterName(ipv6AddrAPIName), 132 NakedType: ipv6AddrNakedType, 133 Fields: []*dsl.FieldDesc{ 134 fields.Def("IPv6Addr", meta.TypeString), 135 fields.HostName(), 136 }, 137 } 138 139 ipv6AddrUpdateParam = &dsl.Model{ 140 Name: names.UpdateParameterName(ipv6AddrAPIName), 141 NakedType: ipv6AddrNakedType, 142 Fields: []*dsl.FieldDesc{ 143 fields.HostName(), 144 }, 145 } 146 )