sim.go raw
1 // Copyright 2022-2025 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 naked
16
17 import (
18 "encoding/json"
19 "strings"
20 "time"
21
22 "github.com/sacloud/iaas-api-go/types"
23 )
24
25 // SIM SIM
26 type SIM struct {
27 ID types.ID `json:",omitempty" yaml:"id,omitempty" structs:",omitempty"`
28 Name string `json:",omitempty" yaml:"name,omitempty" structs:",omitempty"`
29 Description string `yaml:"description"`
30 Tags types.Tags `yaml:"tags"`
31 Status *SIMStatus `json:",omitempty" yaml:",omitempty" structs:",omitempty"`
32 ServiceClass string `json:",omitempty" yaml:",omitempty" structs:",omitempty"`
33 Availability string `json:",omitempty" yaml:",omitempty" structs:",omitempty"`
34 CreatedAt time.Time `json:",omitempty" yaml:",omitempty" structs:",omitempty"`
35 ModifiedAt time.Time `json:",omitempty" yaml:",omitempty" structs:",omitempty"`
36 Provider *SIMProvider `json:",omitempty" yaml:",omitempty" structs:",omitempty"`
37 Icon *Icon `json:",omitempty" yaml:",omitempty" structs:",omitempty"`
38 Remark *SIMRemark `json:",omitempty" yaml:",omitempty" structs:",omitempty"` // Remark
39 }
40
41 // SIMStatus SIMステータス
42 type SIMStatus struct {
43 ICCID string `json:",omitempty" yaml:"iccid,omitempty" structs:",omitempty"` // ICCID
44 SIMInfo *SIMInfo `json:"sim,omitempty" yaml:"sim,omitempty" structs:",omitempty"` // SIM詳細情報
45 }
46
47 // SIMInfo SIM詳細情報
48 type SIMInfo struct {
49 ICCID string `json:"iccid,omitempty" yaml:"iccid,omitempty" structs:",omitempty"`
50 IMSI []string `json:"imsi,omitempty" yaml:"imsi,omitempty" structs:",omitempty"`
51 IMEI string `json:"imei,omitempty" yaml:"imei,omitempty" structs:",omitempty"`
52 IP string `json:"ip,omitempty" yaml:"ip,omitempty" structs:",omitempty"`
53 SessionStatus string `json:"session_status,omitempty" yaml:"session_status,omitempty" structs:",omitempty"`
54 IMEILock bool `json:"imei_lock" yaml:"imei_lock"`
55 Registered bool `json:"registered" yaml:"registered"`
56 Activated bool `json:"activated" yaml:"activated"`
57 ResourceID string `json:"resource_id,omitempty" yaml:"resource_id,omitempty" structs:",omitempty"`
58 RegisteredDate time.Time `json:"registered_date,omitempty" yaml:"registered_date,omitempty" structs:",omitempty"`
59 ActivatedDate time.Time `json:"activated_date,omitempty" yaml:"activated_date,omitempty" structs:",omitempty"`
60 DeactivatedDate time.Time `json:"deactivated_date,omitempty" yaml:"deactivated_date,omitempty" structs:",omitempty"`
61 SIMGroupID string `json:"simgroup_id,omitempty" yaml:"simgroup_id,omitempty" structs:",omitempty"`
62 TrafficBytesOfCurrentMonth *SIMTrafficBytes `json:"traffic_bytes_of_current_month,omitempty" yaml:"traffic_bytes_of_current_month,omitempty" structs:",omitempty"`
63 ConnectedIMEI string `json:"connected_imei,omitempty" yaml:"connected_imei,omitempty" structs:",omitempty"`
64 }
65
66 // SIMTrafficBytes 当月通信量
67 type SIMTrafficBytes struct {
68 UplinkBytes types.StringNumber `json:"uplink_bytes,omitempty" yaml:"uplink_bytes,omitempty" structs:",omitempty"`
69 DownlinkBytes types.StringNumber `json:"downlink_bytes,omitempty" yaml:"downlink_bytes,omitempty" structs:",omitempty"`
70 }
71
72 // SIMProvider SIMプロバイダー
73 type SIMProvider struct {
74 ID int `json:",omitempty" yaml:"id,omitempty" structs:",omitempty"`
75 Class string `json:",omitempty" yaml:"class,omitempty" structs:",omitempty"`
76 Name string `json:",omitempty" yaml:"name,omitempty" structs:",omitempty"`
77 ServiceClass string `json:",omitempty" yaml:"service_class,omitempty" structs:",omitempty"`
78 }
79
80 // SIMRemark remark
81 type SIMRemark struct {
82 PassCode string `json:",omitempty" yaml:"pass_code,omitempty" structs:",omitempty"`
83 }
84
85 // UnmarshalJSON JSONアンマーシャル(配列、オブジェクトが混在するためここで対応)
86 func (s *SIMTrafficBytes) UnmarshalJSON(data []byte) error {
87 targetData := strings.ReplaceAll(strings.ReplaceAll(string(data), " ", ""), "\n", "")
88 if targetData == `[]` {
89 return nil
90 }
91 type alias SIMTrafficBytes
92 tmp := alias{}
93 if err := json.Unmarshal(data, &tmp); err != nil {
94 return err
95 }
96
97 *s = SIMTrafficBytes(tmp)
98 return nil
99 }
100
101 // SIMLog SIMログ
102 type SIMLog struct {
103 Date *time.Time `json:"date,omitempty" yaml:"date,omitempty" structs:",omitempty"`
104 SessionStatus string `json:"session_status,omitempty" yaml:"session_status,omitempty" structs:",omitempty"`
105 ResourceID string `json:"resource_id,omitempty" yaml:"resource_id,omitempty" structs:",omitempty"`
106 IMEI string `json:"imei,omitempty" yaml:"imei,omitempty" structs:",omitempty"`
107 IMSI string `json:"imsi,omitempty" yaml:"imsi,omitempty" structs:",omitempty"`
108 }
109
110 // SIMNetworkOperatorConfig SIM通信キャリア設定
111 type SIMNetworkOperatorConfig struct {
112 Allow bool `json:"allow" yaml:"allow"`
113 CountryCode string `json:"country_code,omitempty" yaml:"country_code,omitempty" structs:",omitempty"`
114 Name string `json:"name,omitempty" yaml:"name,omitempty" structs:",omitempty"`
115 }
116
117 // SIMNetworkOperatorConfigs SIM通信キャリア設定 リクエストパラメータ
118 type SIMNetworkOperatorConfigs struct {
119 NetworkOperatorConfigs []*SIMNetworkOperatorConfig `json:"network_operator_config,omitempty" yaml:"network_operator_config,omitempty" structs:",omitempty"`
120 }
121
122 // SIMAssignIPRequest IPアドレスアサイン リクエストパラメータ
123 type SIMAssignIPRequest struct {
124 IP string `json:"ip"`
125 }
126
127 // SIMIMEILockRequest IMEIロック リクエストパラメータ
128 type SIMIMEILockRequest struct {
129 IMEI string `json:"imei"`
130 }
131