github.com/sacloud/iaas-api-go@v1.12.0/internal/define/cdrom.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  	cdromAPIName     = "CDROM"
    29  	cdromAPIPathName = "cdrom"
    30  )
    31  
    32  var cdromAPI = &dsl.Resource{
    33  	Name:       cdromAPIName,
    34  	PathName:   cdromAPIPathName,
    35  	PathSuffix: dsl.CloudAPISuffix,
    36  	Operations: dsl.Operations{
    37  		// find
    38  		ops.Find(cdromAPIName, cdromNakedType, findParameter, cdromView),
    39  
    40  		// create
    41  		{
    42  			ResourceName: cdromAPIName,
    43  			Name:         "Create",
    44  			PathFormat:   dsl.DefaultPathFormat,
    45  			Method:       http.MethodPost,
    46  			RequestEnvelope: dsl.RequestEnvelope(&dsl.EnvelopePayloadDesc{
    47  				Name: names.ResourceFieldName(cdromAPIName, dsl.PayloadForms.Singular),
    48  				Type: cdromNakedType,
    49  			}),
    50  			ResponseEnvelope: dsl.ResponseEnvelope(
    51  				&dsl.EnvelopePayloadDesc{
    52  					Name: names.ResourceFieldName(cdromAPIName, dsl.PayloadForms.Singular),
    53  					Type: cdromNakedType,
    54  				},
    55  				&dsl.EnvelopePayloadDesc{
    56  					Name: models.ftpServer().Name,
    57  					Type: meta.Static(naked.OpeningFTPServer{}),
    58  				},
    59  			),
    60  			Arguments: dsl.Arguments{
    61  				dsl.MappableArgument("param", cdromCreateParam, names.ResourceFieldName(cdromAPIName, dsl.PayloadForms.Singular)),
    62  			},
    63  			Results: dsl.Results{
    64  				{
    65  					SourceField: names.ResourceFieldName(cdromAPIName, dsl.PayloadForms.Singular),
    66  					DestField:   cdromView.Name,
    67  					IsPlural:    false,
    68  					Model:       cdromView,
    69  				},
    70  				{
    71  					SourceField: models.ftpServer().Name,
    72  					DestField:   models.ftpServer().Name,
    73  					IsPlural:    false,
    74  					Model:       models.ftpServer(),
    75  				},
    76  			},
    77  		},
    78  
    79  		// read
    80  		ops.Read(cdromAPIName, cdromNakedType, cdromView),
    81  
    82  		// update
    83  		ops.Update(cdromAPIName, cdromNakedType, cdromUpdateParam, cdromView),
    84  
    85  		// delete
    86  		ops.Delete(cdromAPIName),
    87  
    88  		// openFTP
    89  		ops.OpenFTP(cdromAPIName, models.ftpServerOpenParameter(), models.ftpServer()),
    90  
    91  		// closeFTP
    92  		ops.CloseFTP(cdromAPIName),
    93  	},
    94  }
    95  var (
    96  	cdromNakedType = meta.Static(naked.CDROM{})
    97  
    98  	cdromView = &dsl.Model{
    99  		Name:      cdromAPIName,
   100  		NakedType: cdromNakedType,
   101  		Fields: []*dsl.FieldDesc{
   102  			fields.ID(),
   103  			fields.Name(),
   104  			fields.Description(),
   105  			fields.DisplayOrder(),
   106  			fields.Tags(),
   107  			fields.Availability(),
   108  			fields.Scope(),
   109  			fields.Storage(),
   110  			fields.SizeMB(),
   111  			fields.IconID(),
   112  			fields.CreatedAt(),
   113  			fields.ModifiedAt(),
   114  		},
   115  	}
   116  
   117  	cdromCreateParam = &dsl.Model{
   118  		Name:      names.CreateParameterName(cdromAPIName),
   119  		NakedType: cdromNakedType,
   120  		Fields: []*dsl.FieldDesc{
   121  			fields.SizeMB(),
   122  			fields.Name(),
   123  			fields.Description(),
   124  			fields.Tags(),
   125  			fields.IconID(),
   126  		},
   127  	}
   128  
   129  	cdromUpdateParam = &dsl.Model{
   130  		Name:      names.UpdateParameterName(cdromAPIName),
   131  		NakedType: cdromNakedType,
   132  		Fields: []*dsl.FieldDesc{
   133  			fields.Name(),
   134  			fields.Description(),
   135  			fields.Tags(),
   136  			fields.IconID(),
   137  		},
   138  	}
   139  )