// Copyright 2019 Amazon.com, Inc. or its affiliates. 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. A copy of the // License is located at // // http://aws.amazon.com/apache2.0/ // // or in the "license" file accompanying this file. This file 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 capabilities import ( "encoding/json" "fmt" ) const ( // Command is the option for the plugin to print capabilities. Command = "capabilities" // TaskENICapability is the capability to support awsvpc network mode. TaskENICapability = "awsvpc-network-mode" ) // Capability indicates the capability of a plugin. type Capability struct { Capabilities []string `json:"capabilities,omitempty"` } // New returns a Capability object with specified capabilities. func New(capabilities ...string) *Capability { return &Capability{ Capabilities: capabilities, } } // String returns the JSON string of the Capability struct. func (capability *Capability) String() (string, error) { data, err := json.Marshal(capability) if err != nil { return "", fmt.Errorf("capabilities: failed to marshal capabilities info %v: %v", capability.Capabilities, err) } return string(data), nil } // Print writes the supported capabilities info into the stdout. func (capability *Capability) Print() error { info, err := capability.String() if err != nil { return err } fmt.Println(info) return nil }