meta/product.go (51 lines of code) (raw):
// Copyright (c) 2009-present, Alibaba Cloud All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package meta
import (
"strings"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk/endpoints"
)
type ProductSet struct {
Products []Product `json:"products"`
}
type Product struct {
Code string `json:"code"`
Version string `json:"version"`
Catalog1 map[string]string `json:"catalog1"`
Catalog2 map[string]string `json:"catalog2"`
Name map[string]string `json:"name"`
LocationServiceCode string `json:"location_service_code"`
RegionalEndpoints map[string]string `json:"regional_endpoints"`
GlobalEndpoint string `json:"global_endpoint"`
RegionalEndpointPattern string `json:"regional_endpoint_patterns"`
ApiStyle string `json:"api_style"`
ApiNames []string `json:"apis"`
}
func (a *Product) GetLowerCode() string {
return strings.ToLower(a.Code)
}
func (a *Product) GetEndpoint(region string, client *sdk.Client) (endpoint string, err error) {
var le error
if a.LocationServiceCode != "" {
// resolve endpoint from location service
rp := endpoints.ResolveParam{
Product: a.Code,
RegionId: region,
LocationProduct: a.LocationServiceCode,
LocationEndpointType: "openAPI",
CommonApi: client.ProcessCommonRequest,
}
ep, err := endpoints.Resolve(&rp)
if err == nil {
return ep, nil
} else {
le = err
}
}
ep, ok := a.RegionalEndpoints[region]
if ok {
return ep, nil
}
if a.GlobalEndpoint != "" {
return a.GlobalEndpoint, nil
}
return "", &InvalidEndpointError{le, region, a}
}