44 lines
947 B
Go
44 lines
947 B
Go
package yaml
|
|
|
|
import (
|
|
"fmt"
|
|
)
|
|
|
|
// External represents an external network entry in compose file.
|
|
// It can be a boolean (true|false) or have a name
|
|
type External struct {
|
|
External bool
|
|
Name string
|
|
}
|
|
|
|
// MarshalYAML implements the Marshaller interface.
|
|
func (n External) MarshalYAML() (tag string, value interface{}, err error) {
|
|
if n.Name == "" {
|
|
return "", n.External, nil
|
|
}
|
|
return "", map[string]interface{}{
|
|
"name": n.Name,
|
|
}, nil
|
|
}
|
|
|
|
// UnmarshalYAML implements the Unmarshaller interface.
|
|
func (n *External) UnmarshalYAML(tag string, value interface{}) error {
|
|
switch v := value.(type) {
|
|
case bool:
|
|
n.External = v
|
|
case map[interface{}]interface{}:
|
|
for mapKey, mapValue := range v {
|
|
switch mapKey {
|
|
case "name":
|
|
n.Name = mapValue.(string)
|
|
default:
|
|
// Ignore unknown keys
|
|
continue
|
|
}
|
|
}
|
|
n.External = true
|
|
default:
|
|
return fmt.Errorf("Failed to unmarshal External: %#v", value)
|
|
}
|
|
return nil
|
|
}
|