package binfo

import (
	"runtime/debug"
	"time"
)

type Binfo struct {
	// Module information.
	Module struct {
		// The module path, e.g. "golang.org/x/tools/cmd/stringer".
		Path string

		// The version of this module.
		Version string

		// The checksum of this module.
		Sum string
	}

	// Information about the build process and target.
	Build struct {
		// The version of the Go toolchain used to build the binary, e.g. "go1.19.2".
		GoVersion string

		// The buildmode flag value, e.g. "exe".
		Mode string

		// The compiler toolchain, e.g. "gc" or "gccgo".
		Compiler string

		// The architecture target, e.g. "amd64".
		Arch string

		// The operating system target, e.g. "linux".
		OS string
	}

	// Information about CGO.
	CGO struct {
		Enabled bool

		Flags struct {
			C   string
			CPP string
			CXX string
			LD  string
		}
	}

	// Information about version control at the time of building.
	VCS struct {
		// The name of the version control system, e.g. "git".
		Name string

		// The current revision, e.g. "6cb6d5fa113f26aa2bc139539eab8939632f0693".
		Revision string

		// The modification time for the current revision.
		Time time.Time

		// Whether or not the source tree had local modifications.
		Modified bool
	}

	// The original data source for build information.
	Orig *debug.BuildInfo
}