github.com/sacloud/iaas-api-go@v1.12.0/internal/define/sim.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 simAPIName = "SIM" 29 simAPIPathName = "commonserviceitem" 30 ) 31 32 var simAPI = &dsl.Resource{ 33 Name: simAPIName, 34 PathName: simAPIPathName, 35 PathSuffix: dsl.CloudAPISuffix, 36 IsGlobal: true, 37 Operations: dsl.Operations{ 38 // find 39 ops.FindCommonServiceItem(simAPIName, simNakedType, findParameter, simView), 40 41 // create 42 ops.CreateCommonServiceItem(simAPIName, simNakedType, simCreateParam, simView), 43 44 // read 45 ops.ReadCommonServiceItem(simAPIName, simNakedType, simView), 46 47 // update 48 ops.UpdateCommonServiceItem(simAPIName, simNakedType, simUpdateParam, simView), 49 50 // delete 51 ops.Delete(simAPIName), 52 53 // activate 54 ops.WithIDAction(simAPIName, "Activate", http.MethodPut, "sim/activate"), 55 // deactivate 56 ops.WithIDAction(simAPIName, "Deactivate", http.MethodPut, "sim/deactivate"), 57 58 // assignIP 59 { 60 ResourceName: simAPIName, 61 Name: "AssignIP", 62 PathFormat: dsl.IDAndSuffixPathFormat("sim/ip"), 63 Method: http.MethodPut, 64 RequestEnvelope: dsl.RequestEnvelope( 65 &dsl.EnvelopePayloadDesc{ 66 Name: "SIM", 67 Type: meta.Static(naked.SIMAssignIPRequest{}), 68 Tags: &dsl.FieldTags{ 69 JSON: "sim", 70 }, 71 }, 72 ), 73 Arguments: dsl.Arguments{ 74 dsl.ArgumentID, 75 dsl.MappableArgument("param", simAssignIPParam, "SIM"), 76 }, 77 }, 78 79 // clearIP 80 ops.WithIDAction(simAPIName, "ClearIP", http.MethodDelete, "sim/ip"), 81 82 // IMEILock 83 { 84 ResourceName: simAPIName, 85 Name: "IMEILock", 86 PathFormat: dsl.IDAndSuffixPathFormat("sim/imeilock"), 87 Method: http.MethodPut, 88 RequestEnvelope: dsl.RequestEnvelope( 89 &dsl.EnvelopePayloadDesc{ 90 Name: "SIM", 91 Type: meta.Static(naked.SIMIMEILockRequest{}), 92 Tags: &dsl.FieldTags{ 93 JSON: "sim", 94 }, 95 }, 96 ), 97 Arguments: dsl.Arguments{ 98 dsl.ArgumentID, 99 dsl.MappableArgument("param", simIMEILockParam, "SIM"), 100 }, 101 }, 102 103 // IMEIUnlock 104 ops.WithIDAction(simAPIName, "IMEIUnlock", http.MethodDelete, "sim/imeilock"), 105 106 // Logs 107 { 108 ResourceName: simAPIName, 109 PathFormat: dsl.IDAndSuffixPathFormat("sim/sessionlog"), 110 Method: http.MethodGet, 111 Name: "Logs", 112 UseWrappedResult: true, 113 Arguments: dsl.Arguments{ 114 dsl.ArgumentID, 115 }, 116 ResponseEnvelope: dsl.ResponseEnvelopePlural(&dsl.EnvelopePayloadDesc{ 117 Name: "Logs", 118 Type: meta.Static(naked.SIMLog{}), 119 Tags: &dsl.FieldTags{ 120 JSON: "logs", 121 }, 122 }), 123 Results: dsl.Results{ 124 { 125 SourceField: "Logs", 126 DestField: "Logs", 127 IsPlural: true, 128 Model: simLogView, 129 }, 130 }, 131 }, 132 133 // GetNetworkOperator 134 { 135 ResourceName: simAPIName, 136 Name: "GetNetworkOperator", 137 PathFormat: dsl.IDAndSuffixPathFormat("sim/network_operator_config"), 138 Method: http.MethodGet, 139 Arguments: dsl.Arguments{ 140 dsl.ArgumentID, 141 }, 142 ResponseEnvelope: dsl.ResponseEnvelope(&dsl.EnvelopePayloadDesc{ 143 Name: "NetworkOperationConfigs", 144 Type: meta.Static([]*naked.SIMNetworkOperatorConfig{}), 145 Tags: &dsl.FieldTags{ 146 JSON: "network_operator_config", 147 }, 148 }), 149 Results: dsl.Results{ 150 { 151 SourceField: "NetworkOperationConfigs", 152 DestField: "Configs", 153 IsPlural: true, 154 Model: simNetworkOperatorConfigView, 155 }, 156 }, 157 }, 158 159 // SetNetworkOperator 160 { 161 ResourceName: simAPIName, 162 Name: "SetNetworkOperator", 163 PathFormat: dsl.IDAndSuffixPathFormat("sim/network_operator_config"), 164 Method: http.MethodPut, 165 RequestEnvelope: dsl.RequestEnvelope(&dsl.EnvelopePayloadDesc{ 166 Name: "NetworkOperatorConfigs", 167 Type: meta.Static([]*naked.SIMNetworkOperatorConfig{}), 168 Tags: &dsl.FieldTags{ 169 JSON: "network_operator_config", 170 }, 171 }), 172 Arguments: dsl.Arguments{ 173 dsl.ArgumentID, 174 &dsl.Argument{ 175 Name: "configs", 176 Type: simNetworkOperatorConfigView, 177 MapConvTag: "[]NetworkOperatorConfigs,recursive", 178 }, 179 }, 180 }, 181 182 // monitor 183 ops.MonitorChild(simAPIName, "SIM", "sim/metrics", 184 monitorParameter, monitors.linkModel()), 185 186 // status 187 { 188 ResourceName: simAPIName, 189 Name: "Status", 190 PathFormat: dsl.IDAndSuffixPathFormat("sim/status"), 191 Method: http.MethodGet, 192 Arguments: dsl.Arguments{ 193 dsl.ArgumentID, 194 }, 195 ResponseEnvelope: dsl.ResponseEnvelope(&dsl.EnvelopePayloadDesc{ 196 Name: "SIM", 197 Type: meta.Static(naked.SIMInfo{}), 198 Tags: &dsl.FieldTags{ 199 JSON: "sim", 200 }, 201 }), 202 Results: dsl.Results{ 203 { 204 SourceField: "SIM", 205 DestField: "SIM", 206 IsPlural: false, 207 Model: models.simInfo(), 208 }, 209 }, 210 }, 211 }, 212 } 213 214 var ( 215 simNakedType = meta.Static(naked.SIM{}) 216 217 simView = &dsl.Model{ 218 Name: simAPIName, 219 NakedType: simNakedType, 220 Fields: []*dsl.FieldDesc{ 221 fields.ID(), 222 fields.Name(), 223 fields.Description(), 224 fields.Tags(), 225 fields.Availability(), 226 fields.Class(), 227 fields.SIMICCID(), 228 fields.Def("Info", models.simInfo(), mapConvTag("Status.SIMInfo")), 229 fields.IconID(), 230 fields.CreatedAt(), 231 fields.ModifiedAt(), 232 }, 233 } 234 235 simCreateParam = &dsl.Model{ 236 Name: names.CreateParameterName(simAPIName), 237 NakedType: simNakedType, 238 ConstFields: []*dsl.ConstFieldDesc{ 239 { 240 Name: "Class", 241 Type: meta.TypeString, 242 Tags: &dsl.FieldTags{ 243 MapConv: "Provider.Class", 244 }, 245 Value: `"sim"`, 246 }, 247 }, 248 Fields: []*dsl.FieldDesc{ 249 fields.Name(), 250 fields.Description(), 251 fields.Tags(), 252 fields.IconID(), 253 fields.SIMICCID(), 254 fields.SIMPassCode(), 255 }, 256 } 257 258 simUpdateParam = &dsl.Model{ 259 Name: names.UpdateParameterName(simAPIName), 260 NakedType: simNakedType, 261 Fields: []*dsl.FieldDesc{ 262 fields.Name(), 263 fields.Description(), 264 fields.Tags(), 265 fields.IconID(), 266 }, 267 } 268 269 simAssignIPParam = &dsl.Model{ 270 Name: "SIMAssignIPRequest", 271 Fields: []*dsl.FieldDesc{ 272 { 273 Name: "IP", 274 Type: meta.TypeString, 275 }, 276 }, 277 NakedType: meta.Static(naked.SIMAssignIPRequest{}), 278 } 279 simIMEILockParam = &dsl.Model{ 280 Name: "SIMIMEILockRequest", 281 Fields: []*dsl.FieldDesc{ 282 { 283 Name: "IMEI", 284 Type: meta.TypeString, 285 }, 286 }, 287 NakedType: meta.Static(naked.SIMIMEILockRequest{}), 288 } 289 290 simLogView = &dsl.Model{ 291 Name: "SIMLog", 292 Fields: []*dsl.FieldDesc{ 293 fields.Def("Date", meta.TypeTime), 294 fields.Def("SessionStatus", meta.TypeString), 295 fields.Def("ResourceID", meta.TypeString), 296 fields.Def("IMEI", meta.TypeString), 297 fields.Def("IMSI", meta.TypeString), 298 }, 299 NakedType: meta.Static(naked.SIMLog{}), 300 } 301 simNetworkOperatorConfigView = &dsl.Model{ 302 Name: "SIMNetworkOperatorConfig", 303 IsArray: true, 304 Fields: []*dsl.FieldDesc{ 305 fields.Def("Allow", meta.TypeFlag), 306 fields.Def("CountryCode", meta.TypeString), 307 fields.Def("Name", meta.TypeString), 308 }, 309 NakedType: meta.Static(naked.SIMNetworkOperatorConfig{}), 310 } 311 )