github.com/sacloud/iaas-api-go@v1.12.0/naked/service_class.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 naked
    16  
    17  import (
    18  	"encoding/json"
    19  
    20  	"github.com/sacloud/iaas-api-go/types"
    21  )
    22  
    23  // ServiceClass 料金
    24  type ServiceClass struct {
    25  	ID               types.ID `json:"ServiceClassID" yaml:"service_class_id"` // サービスクラスID
    26  	ServiceClassName string   `yaml:"service_class_name"`                     // サービスクラス名
    27  	ServiceClassPath string   `yaml:"service_class_path"`                     // サービスクラスパス
    28  	DisplayName      string   `yaml:"display_name"`                           // 表示名
    29  	IsPublic         bool     `yaml:"is_public"`                              // 公開フラグ
    30  	Price            *Price   `yaml:"price"`
    31  }
    32  
    33  // Price 価格
    34  type Price struct {
    35  	Base          int    `yaml:"base"`           // 基本料金
    36  	Daily         int    `yaml:"daily"`          // 日単位料金
    37  	Hourly        int    `yaml:"hourly"`         // 時間単位料金
    38  	Monthly       int    `yaml:"monthly"`        // 分単位料金
    39  	PerUse        int    `yaml:"per_use"`        // 自動バックアップ
    40  	Basic         int    `yaml:"basic"`          // AWS接続オプション: 基本料
    41  	Traffic       int    `yaml:"traffic"`        // AWS接続オプション: トラフィック課金
    42  	DocomoTraffic int    `yaml:"docomo_traffic"` // セキュアモバイルコネクト: Docomo
    43  	KddiTraffic   int    `yaml:"kddi_traffic"`   // セキュアモバイルコネクト: KDDI
    44  	SbTraffic     int    `yaml:"sb_traffic"`     // セキュアモバイルコネクト: SoftBank
    45  	SimSheet      int    `yaml:"sim_sheet"`      // SIM
    46  	Zone          string `yaml:"zone"`           // ゾーン
    47  }
    48  
    49  // UnmarshalJSON 配列/オブジェクトが混在することへの対応
    50  func (p *Price) UnmarshalJSON(b []byte) error {
    51  	if string(b) == "[]" {
    52  		return nil
    53  	}
    54  	type alias Price
    55  
    56  	var a alias
    57  	if err := json.Unmarshal(b, &a); err != nil {
    58  		return err
    59  	}
    60  	*p = Price(a)
    61  	return nil
    62  }