github.com/cloudfoundry-community/cloudfoundry-cli@v6.44.1-0.20240130060226-cda5ed8e89a5+incompatible/resources/route_resource.go (about) 1 package resources 2 3 import ( 4 "encoding/json" 5 6 "code.cloudfoundry.org/cli/api/cloudcontroller" 7 ) 8 9 type RouteDestinationApp struct { 10 GUID string 11 Process struct { 12 Type string 13 } 14 } 15 16 type RouteDestination struct { 17 GUID string 18 App RouteDestinationApp 19 } 20 21 type Route struct { 22 GUID string 23 SpaceGUID string 24 DomainGUID string 25 Host string 26 Path string 27 Protocol string 28 Port int 29 URL string 30 Destinations []RouteDestination 31 Metadata *Metadata 32 } 33 34 func (r Route) MarshalJSON() ([]byte, error) { 35 type Data struct { 36 GUID string `json:"guid,omitempty"` 37 } 38 39 type RelationshipData struct { 40 Data Data `json:"data,omitempty"` 41 } 42 43 type Relationships struct { 44 Space RelationshipData `json:"space,omitempty"` 45 Domain RelationshipData `json:"domain,omitempty"` 46 } 47 48 // Building up the request body in ccRoute 49 type ccRoute struct { 50 GUID string `json:"guid,omitempty"` 51 Host string `json:"host,omitempty"` 52 Path string `json:"path,omitempty"` 53 Protocol string `json:"protocol,omitempty"` 54 Port int `json:"port,omitempty"` 55 Relationships *Relationships `json:"relationships,omitempty"` 56 } 57 58 ccR := ccRoute{ 59 GUID: r.GUID, 60 Host: r.Host, 61 Path: r.Path, 62 Protocol: r.Protocol, 63 Port: r.Port, 64 } 65 66 if r.SpaceGUID != "" { 67 ccR.Relationships = &Relationships{ 68 Space: RelationshipData{Data{GUID: r.SpaceGUID}}, 69 Domain: RelationshipData{Data{GUID: r.DomainGUID}}, 70 } 71 } 72 73 return json.Marshal(ccR) 74 } 75 76 func (r *Route) UnmarshalJSON(data []byte) error { 77 var alias struct { 78 GUID string `json:"guid,omitempty"` 79 Protocol string `json:"protocol,omitempty"` 80 Host string `json:"host,omitempty"` 81 Path string `json:"path,omitempty"` 82 Port int `json:"port,omitempty"` 83 URL string `json:"url,omitempty"` 84 Destinations []RouteDestination `json:"destinations,omitempty"` 85 Metadata *Metadata `json:"metadata,omitempty"` 86 87 Relationships struct { 88 Space struct { 89 Data struct { 90 GUID string `json:"guid,omitempty"` 91 } `json:"data,omitempty"` 92 } `json:"space,omitempty"` 93 Domain struct { 94 Data struct { 95 GUID string `json:"guid,omitempty"` 96 } `json:"data,omitempty"` 97 } `json:"domain,omitempty"` 98 } `json:"relationships,omitempty"` 99 } 100 101 err := cloudcontroller.DecodeJSON(data, &alias) 102 if err != nil { 103 return err 104 } 105 106 r.GUID = alias.GUID 107 r.Protocol = alias.Protocol 108 r.Host = alias.Host 109 r.SpaceGUID = alias.Relationships.Space.Data.GUID 110 r.DomainGUID = alias.Relationships.Domain.Data.GUID 111 r.Path = alias.Path 112 r.Port = alias.Port 113 r.URL = alias.URL 114 r.Destinations = alias.Destinations 115 r.Metadata = alias.Metadata 116 117 return nil 118 }