1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- // +build experimental
- package bundlefile
- import (
- "encoding/json"
- "fmt"
- "io"
- )
- // Bundlefile stores the contents of a bundlefile
- type Bundlefile struct {
- Version string
- Services map[string]Service
- }
- // Service is a service from a bundlefile
- type Service struct {
- Image string
- Command []string `json:",omitempty"`
- Args []string `json:",omitempty"`
- Env []string `json:",omitempty"`
- Labels map[string]string `json:",omitempty"`
- Ports []Port `json:",omitempty"`
- WorkingDir *string `json:",omitempty"`
- User *string `json:",omitempty"`
- Networks []string `json:",omitempty"`
- }
- // Port is a port as defined in a bundlefile
- type Port struct {
- Protocol string
- Port uint32
- }
- // LoadFile loads a bundlefile from a path to the file
- func LoadFile(reader io.Reader) (*Bundlefile, error) {
- bundlefile := &Bundlefile{}
- decoder := json.NewDecoder(reader)
- if err := decoder.Decode(bundlefile); err != nil {
- switch jsonErr := err.(type) {
- case *json.SyntaxError:
- return nil, fmt.Errorf(
- "JSON syntax error at byte %v: %s",
- jsonErr.Offset,
- jsonErr.Error())
- case *json.UnmarshalTypeError:
- return nil, fmt.Errorf(
- "Unexpected type at byte %v. Expected %s but received %s.",
- jsonErr.Offset,
- jsonErr.Type,
- jsonErr.Value)
- }
- return nil, err
- }
- return bundlefile, nil
- }
- // Print writes the contents of the bundlefile to the output writer
- // as human readable json
- func Print(out io.Writer, bundle *Bundlefile) error {
- bytes, err := json.MarshalIndent(*bundle, "", " ")
- if err != nil {
- return err
- }
- _, err = out.Write(bytes)
- return err
- }
|