github.com/sacloud/iaas-api-go@v1.12.0/internal/define/ipv6addr.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  	ipv6AddrAPIName     = "IPv6Addr"
    29  	ipv6AddrAPIPathName = "ipv6addr"
    30  )
    31  
    32  var ipv6AddrAPI = &dsl.Resource{
    33  	Name:       ipv6AddrAPIName,
    34  	PathName:   ipv6AddrAPIPathName,
    35  	PathSuffix: dsl.CloudAPISuffix,
    36  	Operations: dsl.Operations{
    37  		// find
    38  		ops.Find(ipv6AddrAPIName, ipv6AddrNakedType, findParameter, ipv6AddrView),
    39  
    40  		// create
    41  		ops.Create(ipv6AddrAPIName, ipv6AddrNakedType, ipv6AddrCreateParam, ipv6AddrView),
    42  
    43  		// read (IDの代わりにipv6addrを利用)
    44  		{
    45  			ResourceName: ipv6AddrAPIName,
    46  			Name:         "Read",
    47  			PathFormat:   dsl.DefaultPathFormatWithID,
    48  			Method:       http.MethodGet,
    49  			Arguments: dsl.Arguments{
    50  				argIPv6Addr,
    51  			},
    52  			ResponseEnvelope: dsl.ResponseEnvelope(&dsl.EnvelopePayloadDesc{
    53  				Type: ipv6AddrNakedType,
    54  				Name: ipv6AddrAPIName,
    55  			}),
    56  			Results: dsl.Results{
    57  				{
    58  					SourceField: ipv6AddrAPIName,
    59  					DestField:   ipv6AddrView.Name,
    60  					IsPlural:    false,
    61  					Model:       ipv6AddrView,
    62  				},
    63  			},
    64  		},
    65  
    66  		// update (IDの代わりにipv6addrを利用)
    67  		{
    68  			ResourceName: ipv6AddrAPIName,
    69  			Name:         "Update",
    70  			PathFormat:   dsl.DefaultPathFormatWithID,
    71  			Method:       http.MethodPut,
    72  			RequestEnvelope: dsl.RequestEnvelope(&dsl.EnvelopePayloadDesc{
    73  				Type: ipv6AddrNakedType,
    74  				Name: ipv6AddrAPIName,
    75  			}),
    76  			Arguments: dsl.Arguments{
    77  				argIPv6Addr,
    78  				dsl.MappableArgument("param", ipv6AddrUpdateParam, ipv6AddrAPIName),
    79  			},
    80  			ResponseEnvelope: dsl.ResponseEnvelope(&dsl.EnvelopePayloadDesc{
    81  				Type: ipv6AddrNakedType,
    82  				Name: ipv6AddrAPIName,
    83  			}),
    84  			Results: dsl.Results{
    85  				{
    86  					SourceField: ipv6AddrAPIName,
    87  					DestField:   ipv6AddrView.Name,
    88  					IsPlural:    false,
    89  					Model:       ipv6AddrView,
    90  				},
    91  			},
    92  		},
    93  
    94  		// delete (IDの代わりにipv6addrを利用)
    95  		{
    96  			ResourceName: ipv6AddrAPIName,
    97  			Name:         "Delete",
    98  			PathFormat:   dsl.DefaultPathFormatWithID,
    99  			Method:       http.MethodDelete,
   100  			Arguments: dsl.Arguments{
   101  				argIPv6Addr,
   102  			},
   103  		},
   104  	},
   105  }
   106  
   107  var (
   108  	argIPv6Addr = &dsl.Argument{
   109  		Name:            "ipv6addr",
   110  		Type:            meta.TypeString,
   111  		PathFormatAlias: "id",
   112  	}
   113  )
   114  
   115  var (
   116  	ipv6AddrNakedType = meta.Static(naked.IPv6Addr{})
   117  
   118  	ipv6AddrView = &dsl.Model{
   119  		Name:      ipv6AddrAPIName,
   120  		NakedType: ipv6AddrNakedType,
   121  		Fields: []*dsl.FieldDesc{
   122  			fields.Def("IPv6Addr", meta.TypeString),
   123  			fields.HostName(),
   124  			fields.Def("IPv6NetID", meta.TypeID, mapConvTag("IPv6Net.ID")),
   125  			fields.Def("SwitchID", meta.TypeID, mapConvTag("IPv6Net.Switch.ID")),
   126  			fields.InterfaceID(),
   127  		},
   128  	}
   129  
   130  	ipv6AddrCreateParam = &dsl.Model{
   131  		Name:      names.CreateParameterName(ipv6AddrAPIName),
   132  		NakedType: ipv6AddrNakedType,
   133  		Fields: []*dsl.FieldDesc{
   134  			fields.Def("IPv6Addr", meta.TypeString),
   135  			fields.HostName(),
   136  		},
   137  	}
   138  
   139  	ipv6AddrUpdateParam = &dsl.Model{
   140  		Name:      names.UpdateParameterName(ipv6AddrAPIName),
   141  		NakedType: ipv6AddrNakedType,
   142  		Fields: []*dsl.FieldDesc{
   143  			fields.HostName(),
   144  		},
   145  	}
   146  )