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