// Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package modinfo

import "time"

// Note that these structs are publicly visible (part of go list's API)
// and the fields are documented in the help text in ../list/list.go

type ModulePublic struct {
	Path     string        `json:",omitempty"` // module path
	Version  string        `json:",omitempty"` // module version
	Versions []string      `json:",omitempty"` // available module versions
	Replace  *ModulePublic `json:",omitempty"` // replaced by this module
	Time     *time.Time    `json:",omitempty"` // time version was created
	Update   *ModulePublic `json:",omitempty"` // available update (with -u)
	Main     bool          `json:",omitempty"` // is this the main module?
	Indirect bool          `json:",omitempty"` // module is only indirectly needed by main module
	Dir      string        `json:",omitempty"` // directory holding local copy of files, if any
	Error    *ModuleError  `json:",omitempty"` // error loading module
}

type ModuleError struct {
	Err string // error text
}

func (m *ModulePublic) String() string {
	s := m.Path
	if m.Version != "" {
		s += " " + m.Version
		if m.Update != nil {
			s += " [" + m.Update.Version + "]"
		}
	}
	if m.Replace != nil {
		s += " => " + m.Replace.Path
		if m.Replace.Version != "" {
			s += " " + m.Replace.Version
			if m.Replace.Update != nil {
				s += " [" + m.Replace.Update.Version + "]"
			}
		}
	}
	return s
}
